@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.
- package/dist/__tests__/injector.test.d.ts +1 -0
- package/dist/__tests__/injector.test.js +26 -0
- package/dist/__tests__/injector.test.js.map +1 -0
- package/dist/__tests__/sandbox.test.d.ts +1 -0
- package/dist/__tests__/sandbox.test.js +362 -0
- package/dist/__tests__/sandbox.test.js.map +1 -0
- package/dist/cli/build.d.ts +6 -0
- package/dist/cli/build.js +111 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/deploy.d.ts +9 -0
- package/dist/cli/deploy.js +130 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/inbox.d.ts +5 -0
- package/dist/cli/inbox.js +123 -0
- package/dist/cli/inbox.js.map +1 -0
- package/dist/cli/index.js +159 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/issue.d.ts +42 -0
- package/dist/cli/issue.js +297 -0
- package/dist/cli/issue.js.map +1 -0
- package/dist/cli/local.d.ts +9 -0
- package/dist/cli/local.js +139 -0
- package/dist/cli/local.js.map +1 -0
- package/dist/cli/migrate.d.ts +8 -0
- package/dist/cli/migrate.js +167 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/ready.d.ts +5 -0
- package/dist/cli/ready.js +131 -0
- package/dist/cli/ready.js.map +1 -0
- package/dist/cli/slack.d.ts +3 -0
- package/dist/cli/slack.js +57 -0
- package/dist/cli/slack.js.map +1 -0
- package/dist/cli/start.d.ts +12 -0
- package/dist/cli/start.js +14 -0
- package/dist/cli/start.js.map +1 -1
- package/dist/cli/sync.d.ts +8 -0
- package/dist/cli/sync.js +154 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/test.d.ts +8 -0
- package/dist/cli/test.js +110 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/core/daemon.d.ts +31 -0
- package/dist/core/daemon.js +188 -28
- package/dist/core/daemon.js.map +1 -1
- package/dist/core/injector.d.ts +6 -1
- package/dist/core/injector.js +64 -1
- package/dist/core/injector.js.map +1 -1
- package/dist/core/issue-cache.d.ts +44 -0
- package/dist/core/issue-cache.js +75 -0
- package/dist/core/issue-cache.js.map +1 -0
- package/dist/core/registry.d.ts +5 -0
- package/dist/core/registry.js +8 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/core/sandbox.d.ts +127 -0
- package/dist/core/sandbox.js +377 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/tmux.js +8 -10
- package/dist/core/tmux.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/injector.test.ts +29 -0
- package/src/__tests__/sandbox.test.ts +435 -0
- package/src/cli/build.ts +137 -0
- package/src/cli/deploy.ts +153 -0
- package/src/cli/index.ts +163 -0
- package/src/cli/local.ts +174 -0
- package/src/cli/migrate.ts +210 -0
- package/src/cli/slack.ts +69 -0
- package/src/cli/start.ts +22 -0
- package/src/cli/test.ts +141 -0
- package/src/core/daemon.ts +228 -37
- package/src/core/injector.ts +98 -1
- package/src/core/registry.ts +14 -1
- package/src/core/sandbox.ts +505 -0
- package/src/core/tmux.ts +9 -11
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ready CLI Command
|
|
3
|
+
* Shows available unassigned work
|
|
4
|
+
*/
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
import { loadConfig, getAgentState } from "../config/loader.js";
|
|
7
|
+
import { loadCache } 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
|
+
const state = getAgentState(process.env.AGENT_NAME || "");
|
|
14
|
+
if (state?.token)
|
|
15
|
+
return state.token;
|
|
16
|
+
if (process.env.AGENT_TOKEN)
|
|
17
|
+
return process.env.AGENT_TOKEN;
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
async function getWorkspace() {
|
|
21
|
+
const config = loadConfig();
|
|
22
|
+
return config?.workspace || process.env.AGENTMESH_WORKSPACE || "agentmesh";
|
|
23
|
+
}
|
|
24
|
+
async function apiRequest(path) {
|
|
25
|
+
const hubUrl = await getHubUrl();
|
|
26
|
+
const token = await getToken();
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(`${hubUrl}${path}`, {
|
|
29
|
+
headers: {
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
...(token && { Authorization: `Bearer ${token}` }),
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
36
|
+
return { error: error.error || response.statusText };
|
|
37
|
+
}
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
return { data: data };
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
return { error: err.message };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function getPriorityColor(priority) {
|
|
46
|
+
switch (priority) {
|
|
47
|
+
case "P0":
|
|
48
|
+
return pc.red;
|
|
49
|
+
case "P1":
|
|
50
|
+
return (s) => pc.yellow(pc.bold(s));
|
|
51
|
+
case "P2":
|
|
52
|
+
return pc.yellow;
|
|
53
|
+
default:
|
|
54
|
+
return pc.dim;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function getTypeIcon(type) {
|
|
58
|
+
switch (type) {
|
|
59
|
+
case "bug":
|
|
60
|
+
return "!";
|
|
61
|
+
case "feature":
|
|
62
|
+
return "+";
|
|
63
|
+
case "task":
|
|
64
|
+
return "-";
|
|
65
|
+
case "epic":
|
|
66
|
+
return "*";
|
|
67
|
+
default:
|
|
68
|
+
return "-";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function ready() {
|
|
72
|
+
console.log(pc.bold("Available Work"));
|
|
73
|
+
console.log();
|
|
74
|
+
const result = await apiRequest("/api/v1/agents/me/ready");
|
|
75
|
+
if (result.error) {
|
|
76
|
+
if (result.error.includes("fetch") || result.error.includes("network")) {
|
|
77
|
+
console.log(pc.yellow("Offline - showing cached unassigned issues"));
|
|
78
|
+
const workspace = await getWorkspace();
|
|
79
|
+
const cache = loadCache(workspace);
|
|
80
|
+
const unassigned = cache.issues.filter((i) => !i.assignee_agent_id && !i.assignee_user_id && i.status === "open");
|
|
81
|
+
displayReadyWork(unassigned);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
console.error(pc.red(`Error: ${result.error}`));
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
displayReadyWork(result.data?.issues || []);
|
|
88
|
+
}
|
|
89
|
+
function displayReadyWork(issues) {
|
|
90
|
+
if (issues.length === 0) {
|
|
91
|
+
console.log(pc.green("No unassigned work available. All caught up!"));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Group by priority
|
|
95
|
+
const p0 = issues.filter((i) => i.priority === "P0");
|
|
96
|
+
const p1 = issues.filter((i) => i.priority === "P1");
|
|
97
|
+
const p2 = issues.filter((i) => i.priority === "P2");
|
|
98
|
+
const rest = issues.filter((i) => !["P0", "P1", "P2"].includes(i.priority || ""));
|
|
99
|
+
if (p0.length > 0) {
|
|
100
|
+
console.log(pc.red(pc.bold("Critical (P0)")));
|
|
101
|
+
for (const issue of p0) {
|
|
102
|
+
console.log(` ${getTypeIcon(issue.type)} ${pc.cyan(issue.issue_id)} ${issue.title}`);
|
|
103
|
+
}
|
|
104
|
+
console.log();
|
|
105
|
+
}
|
|
106
|
+
if (p1.length > 0) {
|
|
107
|
+
console.log(pc.yellow(pc.bold("High Priority (P1)")));
|
|
108
|
+
for (const issue of p1) {
|
|
109
|
+
console.log(` ${getTypeIcon(issue.type)} ${pc.cyan(issue.issue_id)} ${issue.title}`);
|
|
110
|
+
}
|
|
111
|
+
console.log();
|
|
112
|
+
}
|
|
113
|
+
if (p2.length > 0) {
|
|
114
|
+
console.log(pc.bold("Normal Priority (P2)"));
|
|
115
|
+
for (const issue of p2) {
|
|
116
|
+
console.log(` ${getTypeIcon(issue.type)} ${pc.cyan(issue.issue_id)} ${issue.title}`);
|
|
117
|
+
}
|
|
118
|
+
console.log();
|
|
119
|
+
}
|
|
120
|
+
if (rest.length > 0) {
|
|
121
|
+
console.log(pc.dim("Lower Priority"));
|
|
122
|
+
for (const issue of rest) {
|
|
123
|
+
console.log(` ${getTypeIcon(issue.type)} ${pc.cyan(issue.issue_id)} ${issue.title}`);
|
|
124
|
+
}
|
|
125
|
+
console.log();
|
|
126
|
+
}
|
|
127
|
+
console.log(pc.dim(`Total: ${issues.length} unassigned issue(s)`));
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(`Claim an issue: ${pc.cyan("agentmesh issue claim <id>")}`);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=ready.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready.js","sourceRoot":"","sources":["../../src/cli/ready.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { loadConfig, getAgentState } from "../config/loader.js";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
export async function slack(action, channel, message, options) {
|
|
4
|
+
const config = loadConfig();
|
|
5
|
+
if (!config) {
|
|
6
|
+
console.log(pc.red("No config found. Run 'agentmesh init' first."));
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
if (action === "respond" || action === "reply") {
|
|
10
|
+
if (!channel) {
|
|
11
|
+
console.log(pc.red("Channel is required. Usage: agentmesh slack respond <channel> <message>"));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
if (!message) {
|
|
15
|
+
console.log(pc.red("Message is required. Usage: agentmesh slack respond <channel> <message>"));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
// Get token from agent state or config
|
|
19
|
+
const agentName = options.name || "concierge";
|
|
20
|
+
const agentState = getAgentState(agentName);
|
|
21
|
+
const token = agentState?.token;
|
|
22
|
+
if (!token) {
|
|
23
|
+
console.log(pc.red(`No token found for agent "${agentName}". Is the agent running?`));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const response = await fetch(`${config.hubUrl}/api/v1/integrations/slack/respond`, {
|
|
28
|
+
method: "POST",
|
|
29
|
+
headers: {
|
|
30
|
+
Authorization: `Bearer ${token}`,
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
},
|
|
33
|
+
body: JSON.stringify({ channel, text: message }),
|
|
34
|
+
});
|
|
35
|
+
if (response.ok) {
|
|
36
|
+
console.log(pc.green(`Message sent to Slack channel ${channel}`));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const error = await response.text();
|
|
40
|
+
console.log(pc.red(`Failed to send: ${error}`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.log(pc.red(`Failed to send: ${error.message}`));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(pc.yellow("Usage:"));
|
|
51
|
+
console.log(" agentmesh slack respond <channel> <message> - Send a message to Slack");
|
|
52
|
+
console.log("");
|
|
53
|
+
console.log(pc.dim("Examples:"));
|
|
54
|
+
console.log(' agentmesh slack respond C0123456 "Hello from AgentMesh!"');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/cli/slack.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/start.d.ts
CHANGED
|
@@ -6,5 +6,17 @@ export interface StartOptions {
|
|
|
6
6
|
foreground?: boolean;
|
|
7
7
|
noContext?: boolean;
|
|
8
8
|
autoSetup?: boolean;
|
|
9
|
+
/** Run opencode serve instead of tmux TUI (for Integration Service) */
|
|
10
|
+
serve?: boolean;
|
|
11
|
+
/** Port for opencode serve (default: 3001) */
|
|
12
|
+
servePort?: number;
|
|
13
|
+
/** Run agent in Docker sandbox container */
|
|
14
|
+
sandbox?: boolean;
|
|
15
|
+
/** Docker image for sandbox */
|
|
16
|
+
sandboxImage?: string;
|
|
17
|
+
/** CPU limit for sandbox */
|
|
18
|
+
sandboxCpu?: string;
|
|
19
|
+
/** Memory limit for sandbox */
|
|
20
|
+
sandboxMemory?: string;
|
|
9
21
|
}
|
|
10
22
|
export declare function start(options: StartOptions): Promise<void>;
|
package/dist/cli/start.js
CHANGED
|
@@ -57,6 +57,20 @@ export async function start(options) {
|
|
|
57
57
|
args.push("--no-context");
|
|
58
58
|
if (options.autoSetup)
|
|
59
59
|
args.push("--auto-setup");
|
|
60
|
+
if (options.serve) {
|
|
61
|
+
args.push("--serve");
|
|
62
|
+
if (options.servePort)
|
|
63
|
+
args.push("--serve-port", String(options.servePort));
|
|
64
|
+
}
|
|
65
|
+
if (options.sandbox) {
|
|
66
|
+
args.push("--sandbox");
|
|
67
|
+
if (options.sandboxImage)
|
|
68
|
+
args.push("--sandbox-image", options.sandboxImage);
|
|
69
|
+
if (options.sandboxCpu)
|
|
70
|
+
args.push("--sandbox-cpu", options.sandboxCpu);
|
|
71
|
+
if (options.sandboxMemory)
|
|
72
|
+
args.push("--sandbox-memory", options.sandboxMemory);
|
|
73
|
+
}
|
|
60
74
|
// Spawn detached background process
|
|
61
75
|
const child = spawn("node", [cliPath, ...args], {
|
|
62
76
|
detached: true,
|
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,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/sync.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync CLI Command
|
|
3
|
+
* Synchronize local cache with HQ
|
|
4
|
+
*/
|
|
5
|
+
import pc from "picocolors";
|
|
6
|
+
import { loadConfig, getAgentState } from "../config/loader.js";
|
|
7
|
+
import { loadCache, saveCache, hasPendingChanges, getLastSyncTime, } 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
|
+
const state = getAgentState(process.env.AGENT_NAME || "");
|
|
14
|
+
if (state?.token)
|
|
15
|
+
return state.token;
|
|
16
|
+
if (process.env.AGENT_TOKEN)
|
|
17
|
+
return process.env.AGENT_TOKEN;
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
async function getWorkspace() {
|
|
21
|
+
const config = loadConfig();
|
|
22
|
+
return config?.workspace || process.env.AGENTMESH_WORKSPACE || "agentmesh";
|
|
23
|
+
}
|
|
24
|
+
async function apiRequest(method, path, body) {
|
|
25
|
+
const hubUrl = await getHubUrl();
|
|
26
|
+
const token = await getToken();
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(`${hubUrl}${path}`, {
|
|
29
|
+
method,
|
|
30
|
+
headers: {
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
...(token && { Authorization: `Bearer ${token}` }),
|
|
33
|
+
},
|
|
34
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
35
|
+
});
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
38
|
+
return { error: error.error || response.statusText };
|
|
39
|
+
}
|
|
40
|
+
if (response.status === 204) {
|
|
41
|
+
return { data: undefined };
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
return { data: data };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return { error: err.message };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function sync(options = {}) {
|
|
51
|
+
const workspace = await getWorkspace();
|
|
52
|
+
const cache = loadCache(workspace);
|
|
53
|
+
console.log(pc.cyan("Syncing with AgentMesh HQ..."));
|
|
54
|
+
console.log();
|
|
55
|
+
// Check connectivity first
|
|
56
|
+
const healthResult = await apiRequest("GET", "/health");
|
|
57
|
+
if (healthResult.error) {
|
|
58
|
+
console.error(pc.red("Cannot connect to HQ. Check your network connection."));
|
|
59
|
+
console.log();
|
|
60
|
+
if (hasPendingChanges(workspace)) {
|
|
61
|
+
console.log(pc.yellow(`You have ${cache.pendingChanges.length} pending change(s) queued locally.`));
|
|
62
|
+
}
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
let syncErrors = 0;
|
|
66
|
+
let syncSuccess = 0;
|
|
67
|
+
// Push pending changes first
|
|
68
|
+
if (cache.pendingChanges.length > 0) {
|
|
69
|
+
console.log(pc.bold(`Pushing ${cache.pendingChanges.length} pending change(s)...`));
|
|
70
|
+
const remainingChanges = [];
|
|
71
|
+
for (const change of cache.pendingChanges) {
|
|
72
|
+
const result = await pushChange(workspace, change);
|
|
73
|
+
if (result.success) {
|
|
74
|
+
syncSuccess++;
|
|
75
|
+
console.log(pc.green(` + ${change.action} ${change.issueId || "new issue"}`));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
syncErrors++;
|
|
79
|
+
console.log(pc.red(` x ${change.action} ${change.issueId || "new issue"}: ${result.error}`));
|
|
80
|
+
// Keep failed changes for retry unless forcing
|
|
81
|
+
if (!options.force) {
|
|
82
|
+
remainingChanges.push(change);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Update pending changes
|
|
87
|
+
cache.pendingChanges = remainingChanges;
|
|
88
|
+
saveCache(cache);
|
|
89
|
+
console.log();
|
|
90
|
+
}
|
|
91
|
+
// Pull latest issues
|
|
92
|
+
console.log(pc.bold("Pulling latest issues..."));
|
|
93
|
+
const issuesResult = await apiRequest("GET", `/api/v1/workspaces/${workspace}/issues?limit=100`);
|
|
94
|
+
if (issuesResult.error) {
|
|
95
|
+
console.error(pc.red(`Failed to fetch issues: ${issuesResult.error}`));
|
|
96
|
+
syncErrors++;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const issues = issuesResult.data?.issues || [];
|
|
100
|
+
cache.issues = issues;
|
|
101
|
+
cache.lastSync = new Date().toISOString();
|
|
102
|
+
saveCache(cache);
|
|
103
|
+
console.log(pc.green(` Cached ${issues.length} issue(s)`));
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
// Summary
|
|
107
|
+
if (syncErrors > 0) {
|
|
108
|
+
console.log(pc.yellow(`Sync completed with ${syncErrors} error(s)`));
|
|
109
|
+
if (cache.pendingChanges.length > 0) {
|
|
110
|
+
console.log(pc.dim(`${cache.pendingChanges.length} change(s) still pending`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log(pc.green("Sync completed successfully"));
|
|
115
|
+
}
|
|
116
|
+
const lastSync = getLastSyncTime(workspace);
|
|
117
|
+
if (lastSync) {
|
|
118
|
+
console.log(pc.dim(`Last sync: ${lastSync}`));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function pushChange(workspace, change) {
|
|
122
|
+
switch (change.action) {
|
|
123
|
+
case "create": {
|
|
124
|
+
const result = await apiRequest("POST", `/api/v1/workspaces/${workspace}/issues`, change.data);
|
|
125
|
+
if (result.error) {
|
|
126
|
+
return { success: false, error: result.error };
|
|
127
|
+
}
|
|
128
|
+
return { success: true };
|
|
129
|
+
}
|
|
130
|
+
case "update": {
|
|
131
|
+
if (!change.issueId) {
|
|
132
|
+
return { success: false, error: "Missing issueId for update" };
|
|
133
|
+
}
|
|
134
|
+
const result = await apiRequest("PATCH", `/api/v1/workspaces/${workspace}/issues/${change.issueId}`, change.data);
|
|
135
|
+
if (result.error) {
|
|
136
|
+
return { success: false, error: result.error };
|
|
137
|
+
}
|
|
138
|
+
return { success: true };
|
|
139
|
+
}
|
|
140
|
+
case "delete": {
|
|
141
|
+
if (!change.issueId) {
|
|
142
|
+
return { success: false, error: "Missing issueId for delete" };
|
|
143
|
+
}
|
|
144
|
+
const result = await apiRequest("DELETE", `/api/v1/workspaces/${workspace}/issues/${change.issueId}`);
|
|
145
|
+
if (result.error) {
|
|
146
|
+
return { success: false, error: result.error };
|
|
147
|
+
}
|
|
148
|
+
return { success: true };
|
|
149
|
+
}
|
|
150
|
+
default:
|
|
151
|
+
return { success: false, error: `Unknown action: ${change.action}` };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/test.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
export async function test(options = {}) {
|
|
29
|
+
const projectRoot = findProjectRoot();
|
|
30
|
+
if (options.e2e) {
|
|
31
|
+
await runE2ETests(projectRoot, options);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await runUnitTests(projectRoot, options);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function runUnitTests(projectRoot, options) {
|
|
38
|
+
console.log(pc.cyan("Running unit tests..."));
|
|
39
|
+
// Check if local stack is running for integration tests
|
|
40
|
+
const localStackUp = isLocalStackRunning();
|
|
41
|
+
if (localStackUp) {
|
|
42
|
+
console.log(pc.dim("Local stack detected - integration tests will use local services"));
|
|
43
|
+
}
|
|
44
|
+
const args = ["pnpm"];
|
|
45
|
+
if (options.package) {
|
|
46
|
+
args.push("--filter", options.package);
|
|
47
|
+
}
|
|
48
|
+
args.push("test");
|
|
49
|
+
if (options.watch) {
|
|
50
|
+
args.push("--", "--watch");
|
|
51
|
+
}
|
|
52
|
+
if (options.coverage) {
|
|
53
|
+
args.push("--", "--coverage");
|
|
54
|
+
}
|
|
55
|
+
if (options.updateSnapshots) {
|
|
56
|
+
args.push("--", "-u");
|
|
57
|
+
}
|
|
58
|
+
console.log();
|
|
59
|
+
const result = spawnSync(args[0], args.slice(1), {
|
|
60
|
+
cwd: projectRoot,
|
|
61
|
+
stdio: "inherit",
|
|
62
|
+
env: {
|
|
63
|
+
...process.env,
|
|
64
|
+
// If local stack is running, use it for tests
|
|
65
|
+
...(localStackUp && {
|
|
66
|
+
DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/agentmesh",
|
|
67
|
+
REDIS_URL: "redis://localhost:6380/0",
|
|
68
|
+
}),
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
if (result.status !== 0) {
|
|
72
|
+
console.error(pc.red("Tests failed"));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
console.log();
|
|
76
|
+
console.log(pc.green("All tests passed!"));
|
|
77
|
+
}
|
|
78
|
+
async function runE2ETests(projectRoot, options) {
|
|
79
|
+
console.log(pc.cyan("Running E2E tests..."));
|
|
80
|
+
// E2E tests require the local stack to be running
|
|
81
|
+
const localStackUp = isLocalStackRunning();
|
|
82
|
+
if (!localStackUp) {
|
|
83
|
+
console.log(pc.yellow("Warning: Local stack is not running."));
|
|
84
|
+
console.log(pc.dim("Start it with: agentmesh local up"));
|
|
85
|
+
console.log();
|
|
86
|
+
}
|
|
87
|
+
const args = ["pnpm", "--filter", "@agentmesh/admin", "test:e2e"];
|
|
88
|
+
if (options.updateSnapshots) {
|
|
89
|
+
args.push("--", "--update-snapshots");
|
|
90
|
+
}
|
|
91
|
+
console.log();
|
|
92
|
+
const result = spawnSync(args[0], args.slice(1), {
|
|
93
|
+
cwd: projectRoot,
|
|
94
|
+
stdio: "inherit",
|
|
95
|
+
env: {
|
|
96
|
+
...process.env,
|
|
97
|
+
// Point to local stack if running
|
|
98
|
+
...(localStackUp && {
|
|
99
|
+
PLAYWRIGHT_BASE_URL: "http://localhost:3000",
|
|
100
|
+
}),
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
if (result.status !== 0) {
|
|
104
|
+
console.error(pc.red("E2E tests failed"));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
console.log();
|
|
108
|
+
console.log(pc.green("E2E tests passed!"));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/cli/test.ts"],"names":[],"mappings":"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"}
|
package/dist/core/daemon.d.ts
CHANGED
|
@@ -8,6 +8,18 @@ export interface DaemonOptions {
|
|
|
8
8
|
restoreContext?: boolean;
|
|
9
9
|
/** Auto-clone repository for project assignments */
|
|
10
10
|
autoSetup?: boolean;
|
|
11
|
+
/** Run opencode serve instead of tmux TUI (for Integration Service) */
|
|
12
|
+
serve?: boolean;
|
|
13
|
+
/** Port for opencode serve (default: 3001) */
|
|
14
|
+
servePort?: number;
|
|
15
|
+
/** Run agent in Docker sandbox container */
|
|
16
|
+
sandbox?: boolean;
|
|
17
|
+
/** Docker image for sandbox (default: agentmesh/agent-sandbox:latest) */
|
|
18
|
+
sandboxImage?: string;
|
|
19
|
+
/** CPU limit for sandbox (default: 1) */
|
|
20
|
+
sandboxCpu?: string;
|
|
21
|
+
/** Memory limit for sandbox (default: 2g) */
|
|
22
|
+
sandboxMemory?: string;
|
|
11
23
|
}
|
|
12
24
|
export declare class AgentDaemon {
|
|
13
25
|
private agentName;
|
|
@@ -22,9 +34,28 @@ export declare class AgentDaemon {
|
|
|
22
34
|
private assignedProject;
|
|
23
35
|
private shouldRestoreContext;
|
|
24
36
|
private autoSetup;
|
|
37
|
+
private serveMode;
|
|
38
|
+
private servePort;
|
|
39
|
+
private serveProcess;
|
|
40
|
+
private serverContext;
|
|
41
|
+
private sandboxMode;
|
|
42
|
+
private sandboxImage;
|
|
43
|
+
private sandboxCpu;
|
|
44
|
+
private sandboxMemory;
|
|
45
|
+
private sandbox;
|
|
25
46
|
constructor(options: DaemonOptions);
|
|
26
47
|
start(): Promise<void>;
|
|
27
48
|
stop(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Starts opencode serve mode (for Integration Service)
|
|
51
|
+
* Replaces tmux with a direct HTTP server
|
|
52
|
+
*/
|
|
53
|
+
private startServeMode;
|
|
54
|
+
/**
|
|
55
|
+
* Starts agent in Docker sandbox mode
|
|
56
|
+
* Provides filesystem isolation with only workspace mounted
|
|
57
|
+
*/
|
|
58
|
+
private startSandboxMode;
|
|
28
59
|
/**
|
|
29
60
|
* Saves the current agent context to disk
|
|
30
61
|
*/
|