@agentmeshhq/agent 0.2.1 → 0.3.0
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__/context-template.test.d.ts +4 -0
- package/dist/__tests__/context-template.test.js +233 -0
- package/dist/__tests__/context-template.test.js.map +1 -0
- package/dist/__tests__/loader.test.js +140 -28
- package/dist/__tests__/loader.test.js.map +1 -1
- package/dist/__tests__/no-respawn.test.d.ts +1 -0
- package/dist/__tests__/no-respawn.test.js +254 -0
- package/dist/__tests__/no-respawn.test.js.map +1 -0
- package/dist/__tests__/onboard.test.d.ts +5 -0
- package/dist/__tests__/onboard.test.js +341 -0
- package/dist/__tests__/onboard.test.js.map +1 -0
- package/dist/__tests__/shared-resource-guards.test.d.ts +7 -0
- package/dist/__tests__/shared-resource-guards.test.js +260 -0
- package/dist/__tests__/shared-resource-guards.test.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 +0 -0
- 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/ready.d.ts +5 -0
- package/dist/cli/ready.js +131 -0
- package/dist/cli/ready.js.map +1 -0
- 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/config/loader.d.ts +0 -4
- package/dist/config/loader.js +102 -42
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +2 -2
- package/dist/core/daemon/context-template.d.ts +11 -0
- package/dist/core/daemon/context-template.js +144 -0
- package/dist/core/daemon/context-template.js.map +1 -0
- package/dist/core/daemon/crash-log.d.ts +0 -2
- package/dist/core/daemon/crash-log.js +0 -1
- package/dist/core/daemon/crash-log.js.map +1 -1
- package/dist/core/daemon/git-auth.d.ts +18 -0
- package/dist/core/daemon/git-auth.js +88 -0
- package/dist/core/daemon/git-auth.js.map +1 -0
- package/dist/core/daemon/health-policy.d.ts +0 -4
- package/dist/core/daemon/health-policy.js +0 -8
- package/dist/core/daemon/health-policy.js.map +1 -1
- package/dist/core/daemon/state.js +1 -0
- package/dist/core/daemon/state.js.map +1 -1
- package/dist/core/daemon/workspace.d.ts +13 -0
- package/dist/core/daemon/workspace.js +39 -0
- package/dist/core/daemon/workspace.js.map +1 -1
- package/dist/core/daemon.d.ts +9 -6
- package/dist/core/daemon.js +206 -185
- package/dist/core/daemon.js.map +1 -1
- package/dist/core/injector.d.ts +5 -1
- package/dist/core/injector.js +77 -0
- 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 +62 -0
- package/dist/core/registry.js +18 -0
- package/dist/core/registry.js.map +1 -1
- package/package.json +12 -11
- package/LICENSE +0 -21
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Resource Guards Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for workdir conflict detection, serve port collision detection,
|
|
5
|
+
* HQ workdir per-agent expansion, and servePort state persistence.
|
|
6
|
+
*/
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { describe, expect, it } from "vitest";
|
|
9
|
+
// These tests exercise the guard logic used in daemon.ts without
|
|
10
|
+
// instantiating the full daemon. We replicate the inline checks.
|
|
11
|
+
describe("Workdir conflict guard", () => {
|
|
12
|
+
function findWorkdirConflict(agents, agentName, workdir, isRunning) {
|
|
13
|
+
const resolvedWorkdir = path.resolve(workdir);
|
|
14
|
+
return agents.find((a) => a.name !== agentName &&
|
|
15
|
+
a.workdir &&
|
|
16
|
+
path.resolve(a.workdir) === resolvedWorkdir &&
|
|
17
|
+
a.pid > 0 &&
|
|
18
|
+
isRunning(a.pid));
|
|
19
|
+
}
|
|
20
|
+
it("detects conflict when another running agent uses same workdir", () => {
|
|
21
|
+
const agents = [
|
|
22
|
+
{
|
|
23
|
+
name: "agent-1",
|
|
24
|
+
agentId: "id-1",
|
|
25
|
+
pid: 1001,
|
|
26
|
+
tmuxSession: "s1",
|
|
27
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
28
|
+
workdir: "/Users/dev/project",
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
const conflict = findWorkdirConflict(agents, "agent-2", "/Users/dev/project", () => true);
|
|
32
|
+
expect(conflict).toBeDefined();
|
|
33
|
+
expect(conflict.name).toBe("agent-1");
|
|
34
|
+
});
|
|
35
|
+
it("no conflict when same agent name (self-check)", () => {
|
|
36
|
+
const agents = [
|
|
37
|
+
{
|
|
38
|
+
name: "agent-1",
|
|
39
|
+
agentId: "id-1",
|
|
40
|
+
pid: 1001,
|
|
41
|
+
tmuxSession: "s1",
|
|
42
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
43
|
+
workdir: "/Users/dev/project",
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
const conflict = findWorkdirConflict(agents, "agent-1", "/Users/dev/project", () => true);
|
|
47
|
+
expect(conflict).toBeUndefined();
|
|
48
|
+
});
|
|
49
|
+
it("no conflict when other agent process is dead", () => {
|
|
50
|
+
const agents = [
|
|
51
|
+
{
|
|
52
|
+
name: "agent-1",
|
|
53
|
+
agentId: "id-1",
|
|
54
|
+
pid: 1001,
|
|
55
|
+
tmuxSession: "s1",
|
|
56
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
57
|
+
workdir: "/Users/dev/project",
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
const conflict = findWorkdirConflict(agents, "agent-2", "/Users/dev/project", () => false);
|
|
61
|
+
expect(conflict).toBeUndefined();
|
|
62
|
+
});
|
|
63
|
+
it("no conflict when workdirs differ", () => {
|
|
64
|
+
const agents = [
|
|
65
|
+
{
|
|
66
|
+
name: "agent-1",
|
|
67
|
+
agentId: "id-1",
|
|
68
|
+
pid: 1001,
|
|
69
|
+
tmuxSession: "s1",
|
|
70
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
71
|
+
workdir: "/Users/dev/project-agent-1",
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
const conflict = findWorkdirConflict(agents, "agent-2", "/Users/dev/project-agent-2", () => true);
|
|
75
|
+
expect(conflict).toBeUndefined();
|
|
76
|
+
});
|
|
77
|
+
it("no conflict when other agent has no workdir", () => {
|
|
78
|
+
const agents = [
|
|
79
|
+
{
|
|
80
|
+
name: "agent-1",
|
|
81
|
+
agentId: "id-1",
|
|
82
|
+
pid: 1001,
|
|
83
|
+
tmuxSession: "s1",
|
|
84
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
const conflict = findWorkdirConflict(agents, "agent-2", "/Users/dev/project", () => true);
|
|
88
|
+
expect(conflict).toBeUndefined();
|
|
89
|
+
});
|
|
90
|
+
it("resolves relative paths correctly", () => {
|
|
91
|
+
const agents = [
|
|
92
|
+
{
|
|
93
|
+
name: "agent-1",
|
|
94
|
+
agentId: "id-1",
|
|
95
|
+
pid: 1001,
|
|
96
|
+
tmuxSession: "s1",
|
|
97
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
98
|
+
workdir: path.resolve("./project"),
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
const conflict = findWorkdirConflict(agents, "agent-2", "./project", () => true);
|
|
102
|
+
expect(conflict).toBeDefined();
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("Serve port collision guard", () => {
|
|
106
|
+
function findPortConflict(agents, agentName, servePort, isRunning) {
|
|
107
|
+
return agents.find((a) => a.name !== agentName &&
|
|
108
|
+
a.servePort === servePort &&
|
|
109
|
+
a.pid > 0 &&
|
|
110
|
+
isRunning(a.pid));
|
|
111
|
+
}
|
|
112
|
+
it("detects port collision with running agent", () => {
|
|
113
|
+
const agents = [
|
|
114
|
+
{
|
|
115
|
+
name: "serve-agent-1",
|
|
116
|
+
agentId: "id-1",
|
|
117
|
+
pid: 2001,
|
|
118
|
+
tmuxSession: "serve:3001",
|
|
119
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
120
|
+
servePort: 3001,
|
|
121
|
+
},
|
|
122
|
+
];
|
|
123
|
+
const conflict = findPortConflict(agents, "serve-agent-2", 3001, () => true);
|
|
124
|
+
expect(conflict).toBeDefined();
|
|
125
|
+
expect(conflict.name).toBe("serve-agent-1");
|
|
126
|
+
});
|
|
127
|
+
it("no collision when same agent (self-check)", () => {
|
|
128
|
+
const agents = [
|
|
129
|
+
{
|
|
130
|
+
name: "serve-agent-1",
|
|
131
|
+
agentId: "id-1",
|
|
132
|
+
pid: 2001,
|
|
133
|
+
tmuxSession: "serve:3001",
|
|
134
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
135
|
+
servePort: 3001,
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
const conflict = findPortConflict(agents, "serve-agent-1", 3001, () => true);
|
|
139
|
+
expect(conflict).toBeUndefined();
|
|
140
|
+
});
|
|
141
|
+
it("no collision when other agent process is dead", () => {
|
|
142
|
+
const agents = [
|
|
143
|
+
{
|
|
144
|
+
name: "serve-agent-1",
|
|
145
|
+
agentId: "id-1",
|
|
146
|
+
pid: 2001,
|
|
147
|
+
tmuxSession: "serve:3001",
|
|
148
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
149
|
+
servePort: 3001,
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
const conflict = findPortConflict(agents, "serve-agent-2", 3001, () => false);
|
|
153
|
+
expect(conflict).toBeUndefined();
|
|
154
|
+
});
|
|
155
|
+
it("no collision when ports differ", () => {
|
|
156
|
+
const agents = [
|
|
157
|
+
{
|
|
158
|
+
name: "serve-agent-1",
|
|
159
|
+
agentId: "id-1",
|
|
160
|
+
pid: 2001,
|
|
161
|
+
tmuxSession: "serve:3001",
|
|
162
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
163
|
+
servePort: 3001,
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
const conflict = findPortConflict(agents, "serve-agent-2", 3002, () => true);
|
|
167
|
+
expect(conflict).toBeUndefined();
|
|
168
|
+
});
|
|
169
|
+
it("no collision when other agent has no servePort", () => {
|
|
170
|
+
const agents = [
|
|
171
|
+
{
|
|
172
|
+
name: "tmux-agent",
|
|
173
|
+
agentId: "id-1",
|
|
174
|
+
pid: 2001,
|
|
175
|
+
tmuxSession: "agentmesh-tmux-agent",
|
|
176
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
const conflict = findPortConflict(agents, "serve-agent-2", 3001, () => true);
|
|
180
|
+
expect(conflict).toBeUndefined();
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
describe("HQ workdir per-agent expansion", () => {
|
|
184
|
+
it("appends agent name as sibling directory", () => {
|
|
185
|
+
const baseWorkdir = "/Users/raju/Dev/agentmesh";
|
|
186
|
+
const agentName = "atlas-dev-1";
|
|
187
|
+
const uniqueWorkdir = path.join(path.dirname(baseWorkdir), `${path.basename(baseWorkdir)}-${agentName}`);
|
|
188
|
+
expect(uniqueWorkdir).toBe("/Users/raju/Dev/agentmesh-atlas-dev-1");
|
|
189
|
+
});
|
|
190
|
+
it("produces unique paths for different agents", () => {
|
|
191
|
+
const baseWorkdir = "/Users/raju/Dev/agentmesh";
|
|
192
|
+
const workdir1 = path.join(path.dirname(baseWorkdir), `${path.basename(baseWorkdir)}-agent-1`);
|
|
193
|
+
const workdir2 = path.join(path.dirname(baseWorkdir), `${path.basename(baseWorkdir)}-agent-2`);
|
|
194
|
+
expect(workdir1).not.toBe(workdir2);
|
|
195
|
+
expect(workdir1).toBe("/Users/raju/Dev/agentmesh-agent-1");
|
|
196
|
+
expect(workdir2).toBe("/Users/raju/Dev/agentmesh-agent-2");
|
|
197
|
+
});
|
|
198
|
+
it("handles nested paths correctly", () => {
|
|
199
|
+
const baseWorkdir = "/home/user/projects/my-app";
|
|
200
|
+
const agentName = "worker";
|
|
201
|
+
const uniqueWorkdir = path.join(path.dirname(baseWorkdir), `${path.basename(baseWorkdir)}-${agentName}`);
|
|
202
|
+
expect(uniqueWorkdir).toBe("/home/user/projects/my-app-worker");
|
|
203
|
+
});
|
|
204
|
+
it("handles trailing slash in base workdir", () => {
|
|
205
|
+
// path.basename and path.dirname handle trailing slashes correctly on POSIX
|
|
206
|
+
const baseWorkdir = "/Users/raju/Dev/agentmesh";
|
|
207
|
+
const agentName = "test";
|
|
208
|
+
const uniqueWorkdir = path.join(path.dirname(baseWorkdir), `${path.basename(baseWorkdir)}-${agentName}`);
|
|
209
|
+
expect(uniqueWorkdir).toBe("/Users/raju/Dev/agentmesh-test");
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
describe("servePort in AgentState", () => {
|
|
213
|
+
it("servePort field is included in state", () => {
|
|
214
|
+
const agent = {
|
|
215
|
+
name: "serve-agent",
|
|
216
|
+
agentId: "id-1",
|
|
217
|
+
pid: 3001,
|
|
218
|
+
tmuxSession: "serve:3001",
|
|
219
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
220
|
+
servePort: 3001,
|
|
221
|
+
};
|
|
222
|
+
expect(agent.servePort).toBe(3001);
|
|
223
|
+
});
|
|
224
|
+
it("servePort is optional (undefined for tmux agents)", () => {
|
|
225
|
+
const agent = {
|
|
226
|
+
name: "tmux-agent",
|
|
227
|
+
agentId: "id-2",
|
|
228
|
+
pid: 4001,
|
|
229
|
+
tmuxSession: "agentmesh-tmux-agent",
|
|
230
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
231
|
+
};
|
|
232
|
+
expect(agent.servePort).toBeUndefined();
|
|
233
|
+
});
|
|
234
|
+
it("servePort serializes correctly in state JSON", () => {
|
|
235
|
+
const state = {
|
|
236
|
+
agents: [
|
|
237
|
+
{
|
|
238
|
+
name: "serve-agent",
|
|
239
|
+
agentId: "id-1",
|
|
240
|
+
pid: 3001,
|
|
241
|
+
tmuxSession: "serve:3001",
|
|
242
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
243
|
+
servePort: 3001,
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "tmux-agent",
|
|
247
|
+
agentId: "id-2",
|
|
248
|
+
pid: 4001,
|
|
249
|
+
tmuxSession: "agentmesh-tmux",
|
|
250
|
+
startedAt: "2024-01-01T00:00:00Z",
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
const json = JSON.stringify(state);
|
|
255
|
+
const parsed = JSON.parse(json);
|
|
256
|
+
expect(parsed.agents[0].servePort).toBe(3001);
|
|
257
|
+
expect(parsed.agents[1].servePort).toBeUndefined();
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=shared-resource-guards.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-resource-guards.test.js","sourceRoot":"","sources":["../../src/__tests__/shared-resource-guards.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inbox CLI Command
|
|
3
|
+
* Shows agent's assigned issues and pending handoffs
|
|
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 getStatusColor(status) {
|
|
46
|
+
switch (status) {
|
|
47
|
+
case "open":
|
|
48
|
+
return pc.yellow;
|
|
49
|
+
case "in_progress":
|
|
50
|
+
return pc.blue;
|
|
51
|
+
case "review":
|
|
52
|
+
return pc.magenta;
|
|
53
|
+
case "closed":
|
|
54
|
+
return pc.green;
|
|
55
|
+
default:
|
|
56
|
+
return pc.dim;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getPriorityColor(priority) {
|
|
60
|
+
switch (priority) {
|
|
61
|
+
case "P0":
|
|
62
|
+
return pc.red;
|
|
63
|
+
case "P1":
|
|
64
|
+
return (s) => pc.yellow(pc.bold(s));
|
|
65
|
+
case "P2":
|
|
66
|
+
return pc.yellow;
|
|
67
|
+
default:
|
|
68
|
+
return pc.dim;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function inbox() {
|
|
72
|
+
console.log(pc.bold("Your Inbox"));
|
|
73
|
+
console.log();
|
|
74
|
+
// Fetch issues assigned to me
|
|
75
|
+
const issuesResult = await apiRequest("/api/v1/agents/me/inbox");
|
|
76
|
+
if (issuesResult.error) {
|
|
77
|
+
if (issuesResult.error.includes("fetch") || issuesResult.error.includes("network")) {
|
|
78
|
+
console.log(pc.yellow("Offline - showing cached assigned issues"));
|
|
79
|
+
const workspace = await getWorkspace();
|
|
80
|
+
const cache = loadCache(workspace);
|
|
81
|
+
const state = getAgentState(process.env.AGENT_NAME || "");
|
|
82
|
+
const myIssues = cache.issues.filter((i) => i.assignee_agent_id === state?.agentId && i.status !== "closed");
|
|
83
|
+
displayInbox(myIssues);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
console.error(pc.red(`Error fetching inbox: ${issuesResult.error}`));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
displayInbox(issuesResult.data?.issues || []);
|
|
90
|
+
}
|
|
91
|
+
function displayInbox(issues) {
|
|
92
|
+
if (issues.length === 0) {
|
|
93
|
+
console.log(pc.dim("No assigned issues. Use 'agentmesh ready' to find available work."));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Group by status
|
|
97
|
+
const inProgress = issues.filter((i) => i.status === "in_progress");
|
|
98
|
+
const review = issues.filter((i) => i.status === "review");
|
|
99
|
+
const open = issues.filter((i) => i.status === "open");
|
|
100
|
+
if (inProgress.length > 0) {
|
|
101
|
+
console.log(pc.blue(pc.bold("In Progress")));
|
|
102
|
+
for (const issue of inProgress) {
|
|
103
|
+
console.log(` ${pc.cyan(issue.issue_id)} ${getPriorityColor(issue.priority)(issue.priority)} ${issue.title}`);
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
if (review.length > 0) {
|
|
108
|
+
console.log(pc.magenta(pc.bold("In Review")));
|
|
109
|
+
for (const issue of review) {
|
|
110
|
+
console.log(` ${pc.cyan(issue.issue_id)} ${getPriorityColor(issue.priority)(issue.priority)} ${issue.title}`);
|
|
111
|
+
}
|
|
112
|
+
console.log();
|
|
113
|
+
}
|
|
114
|
+
if (open.length > 0) {
|
|
115
|
+
console.log(pc.yellow(pc.bold("Open")));
|
|
116
|
+
for (const issue of open) {
|
|
117
|
+
console.log(` ${pc.cyan(issue.issue_id)} ${getPriorityColor(issue.priority)(issue.priority)} ${issue.title}`);
|
|
118
|
+
}
|
|
119
|
+
console.log();
|
|
120
|
+
}
|
|
121
|
+
console.log(pc.dim(`Total: ${issues.length} issue(s) assigned to you`));
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/cli/inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Issue CLI Commands
|
|
3
|
+
* Integrated issue tracking for agents
|
|
4
|
+
*/
|
|
5
|
+
export interface CreateIssueOptions {
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
type?: string;
|
|
9
|
+
priority?: string;
|
|
10
|
+
project?: string;
|
|
11
|
+
parent?: string;
|
|
12
|
+
labels?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare function createIssue(options: CreateIssueOptions): Promise<void>;
|
|
15
|
+
export interface ListIssuesOptions {
|
|
16
|
+
status?: string;
|
|
17
|
+
type?: string;
|
|
18
|
+
priority?: string;
|
|
19
|
+
assignee?: string;
|
|
20
|
+
project?: string;
|
|
21
|
+
limit?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function listIssues(options?: ListIssuesOptions): Promise<void>;
|
|
24
|
+
export declare function showIssue(issueId: string): Promise<void>;
|
|
25
|
+
export interface UpdateIssueOptions {
|
|
26
|
+
title?: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
type?: string;
|
|
29
|
+
priority?: string;
|
|
30
|
+
status?: string;
|
|
31
|
+
project?: string;
|
|
32
|
+
assignee?: string;
|
|
33
|
+
labels?: string[];
|
|
34
|
+
}
|
|
35
|
+
export declare function updateIssue(issueId: string, options: UpdateIssueOptions): Promise<void>;
|
|
36
|
+
export declare function closeIssue(issueId: string): Promise<void>;
|
|
37
|
+
export declare function claimIssue(issueId: string): Promise<void>;
|
|
38
|
+
export interface HandoffOptions {
|
|
39
|
+
to: string;
|
|
40
|
+
reason?: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function handoffIssue(issueId: string, options: HandoffOptions): Promise<void>;
|