agenthub-multiagent-mcp 1.64.0 → 1.66.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/channel.js +28 -5
- package/dist/channel.js.map +1 -1
- package/dist/channelDiagnostics.d.ts +19 -0
- package/dist/channelDiagnostics.d.ts.map +1 -1
- package/dist/channelDiagnostics.js +46 -0
- package/dist/channelDiagnostics.js.map +1 -1
- package/dist/channelDiagnostics.test.js +108 -0
- package/dist/channelDiagnostics.test.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +27 -84
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/openspec-viz/parseTasks.test.d.ts +2 -0
- package/dist/tools/openspec-viz/parseTasks.test.d.ts.map +1 -0
- package/dist/tools/openspec-viz/parseTasks.test.js +220 -0
- package/dist/tools/openspec-viz/parseTasks.test.js.map +1 -0
- package/dist/tools/openspec-viz/parser.d.ts +10 -1
- package/dist/tools/openspec-viz/parser.d.ts.map +1 -1
- package/dist/tools/openspec-viz/parser.js +72 -9
- package/dist/tools/openspec-viz/parser.js.map +1 -1
- package/dist/tools/openspec-viz/taskSync.d.ts +115 -0
- package/dist/tools/openspec-viz/taskSync.d.ts.map +1 -0
- package/dist/tools/openspec-viz/taskSync.js +144 -0
- package/dist/tools/openspec-viz/taskSync.js.map +1 -0
- package/dist/tools/openspec-viz/taskSync.test.d.ts +2 -0
- package/dist/tools/openspec-viz/taskSync.test.d.ts.map +1 -0
- package/dist/tools/openspec-viz/taskSync.test.js +198 -0
- package/dist/tools/openspec-viz/taskSync.test.js.map +1 -0
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +9 -2
- package/dist/websocket.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { TaskGroup } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The slice of the AgentHub client the task sync needs.
|
|
4
|
+
*
|
|
5
|
+
* Declared here rather than importing the concrete client so the sync can be
|
|
6
|
+
* driven by a fake in tests — the behaviour that matters (what happens when a
|
|
7
|
+
* create throws, and which stories are considered duplicates) is otherwise
|
|
8
|
+
* only reachable through a live server.
|
|
9
|
+
*/
|
|
10
|
+
export interface TaskSyncClient {
|
|
11
|
+
listProjectStories(projectId: string, epicId?: string): Promise<{
|
|
12
|
+
stories: Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
key: string;
|
|
16
|
+
status: string;
|
|
17
|
+
epic_id?: string;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
20
|
+
listProjectTasks(projectId: string, storyId?: string): Promise<{
|
|
21
|
+
tasks: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
key: string;
|
|
25
|
+
status: string;
|
|
26
|
+
story_id?: string;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
createStory(params: {
|
|
30
|
+
project_id: string;
|
|
31
|
+
epic_id?: string;
|
|
32
|
+
title: string;
|
|
33
|
+
labels?: string[];
|
|
34
|
+
openspec_change_id?: string;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
id: string;
|
|
37
|
+
key: string;
|
|
38
|
+
}>;
|
|
39
|
+
createTask(params: {
|
|
40
|
+
project_id: string;
|
|
41
|
+
story_id?: string;
|
|
42
|
+
title: string;
|
|
43
|
+
labels?: string[];
|
|
44
|
+
}): Promise<{
|
|
45
|
+
ok: true;
|
|
46
|
+
id: string;
|
|
47
|
+
key: string;
|
|
48
|
+
} | {
|
|
49
|
+
ok: false;
|
|
50
|
+
status: number;
|
|
51
|
+
error: string;
|
|
52
|
+
message?: string;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
export interface TaskSyncCounts {
|
|
56
|
+
storiesCreated: number;
|
|
57
|
+
tasksCreated: number;
|
|
58
|
+
storiesSkipped: number;
|
|
59
|
+
tasksSkipped: number;
|
|
60
|
+
}
|
|
61
|
+
export type TaskSyncOutcome =
|
|
62
|
+
/** The sync was not requested, or there was nothing to sync. */
|
|
63
|
+
{
|
|
64
|
+
status: "skipped";
|
|
65
|
+
reason: string;
|
|
66
|
+
} | ({
|
|
67
|
+
status: "ok";
|
|
68
|
+
} & TaskSyncCounts)
|
|
69
|
+
/**
|
|
70
|
+
* The sync threw. The publish is still a success — the attachments are
|
|
71
|
+
* already uploaded — but the hierarchy is partial, and `atGroup`/`atTask`
|
|
72
|
+
* say how far it got so the operator knows which part exists.
|
|
73
|
+
*/
|
|
74
|
+
| ({
|
|
75
|
+
status: "failed";
|
|
76
|
+
error: string;
|
|
77
|
+
atGroup?: string;
|
|
78
|
+
atTask?: string;
|
|
79
|
+
} & TaskSyncCounts);
|
|
80
|
+
export interface TaskSyncArgs {
|
|
81
|
+
client: TaskSyncClient;
|
|
82
|
+
projectId: string;
|
|
83
|
+
taskGroups: TaskGroup[];
|
|
84
|
+
/** The ticket the OpenSpec was published to. */
|
|
85
|
+
ticketType: "epic" | "story" | "task";
|
|
86
|
+
ticketId: string;
|
|
87
|
+
/** OpenSpec change id, stamped on created stories so the resolver finds them. */
|
|
88
|
+
changeId?: string;
|
|
89
|
+
/** Defaults to true; false means the caller passed `sync_tasks: false`. */
|
|
90
|
+
enabled?: boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create Stories and Tasks in the ticket system from an OpenSpec change's task
|
|
94
|
+
* groups. Each group becomes a Story, each checkbox item a Task.
|
|
95
|
+
*
|
|
96
|
+
* Two things this deliberately does NOT do:
|
|
97
|
+
*
|
|
98
|
+
* - It does not throw. The attachments are uploaded before it runs, so a
|
|
99
|
+
* publish is still worth reporting when the hierarchy fails. But it
|
|
100
|
+
* *reports* the failure — it used to be wrapped in a bare `catch` in the
|
|
101
|
+
* tool handler, which made a crashed sync byte-identical to one that was
|
|
102
|
+
* never asked for, and a half-built hierarchy was discovered only by
|
|
103
|
+
* someone independently listing the epic's children.
|
|
104
|
+
*
|
|
105
|
+
* - It does not match a story by title across the whole project. When
|
|
106
|
+
* publishing to an epic it looks only at that epic's stories. Group
|
|
107
|
+
* headings like "Documentation" and "Validation" come from the repo's own
|
|
108
|
+
* task template, so nearly every change has both; matching project-wide
|
|
109
|
+
* attached a change's tasks to an unrelated epic's story, which looks like
|
|
110
|
+
* success and is worse than failing.
|
|
111
|
+
*/
|
|
112
|
+
export declare function syncTaskGroups(args: TaskSyncArgs): Promise<TaskSyncOutcome>;
|
|
113
|
+
/** One line describing the outcome, for the tool's summary message. */
|
|
114
|
+
export declare function describeTaskSync(outcome: TaskSyncOutcome): string;
|
|
115
|
+
//# sourceMappingURL=taskSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSync.d.ts","sourceRoot":"","sources":["../../../src/tools/openspec-viz/taskSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Stories and Tasks in the ticket system from an OpenSpec change's task
|
|
3
|
+
* groups. Each group becomes a Story, each checkbox item a Task.
|
|
4
|
+
*
|
|
5
|
+
* Two things this deliberately does NOT do:
|
|
6
|
+
*
|
|
7
|
+
* - It does not throw. The attachments are uploaded before it runs, so a
|
|
8
|
+
* publish is still worth reporting when the hierarchy fails. But it
|
|
9
|
+
* *reports* the failure — it used to be wrapped in a bare `catch` in the
|
|
10
|
+
* tool handler, which made a crashed sync byte-identical to one that was
|
|
11
|
+
* never asked for, and a half-built hierarchy was discovered only by
|
|
12
|
+
* someone independently listing the epic's children.
|
|
13
|
+
*
|
|
14
|
+
* - It does not match a story by title across the whole project. When
|
|
15
|
+
* publishing to an epic it looks only at that epic's stories. Group
|
|
16
|
+
* headings like "Documentation" and "Validation" come from the repo's own
|
|
17
|
+
* task template, so nearly every change has both; matching project-wide
|
|
18
|
+
* attached a change's tasks to an unrelated epic's story, which looks like
|
|
19
|
+
* success and is worse than failing.
|
|
20
|
+
*/
|
|
21
|
+
export async function syncTaskGroups(args) {
|
|
22
|
+
const { client, projectId, taskGroups, ticketType, ticketId, changeId } = args;
|
|
23
|
+
if (args.enabled === false) {
|
|
24
|
+
return { status: "skipped", reason: "sync_tasks was not requested" };
|
|
25
|
+
}
|
|
26
|
+
if (!taskGroups.length) {
|
|
27
|
+
return { status: "skipped", reason: "the change has no task groups" };
|
|
28
|
+
}
|
|
29
|
+
if (!projectId) {
|
|
30
|
+
return { status: "skipped", reason: "the agent is not bound to a project" };
|
|
31
|
+
}
|
|
32
|
+
const counts = {
|
|
33
|
+
storiesCreated: 0,
|
|
34
|
+
tasksCreated: 0,
|
|
35
|
+
storiesSkipped: 0,
|
|
36
|
+
tasksSkipped: 0,
|
|
37
|
+
};
|
|
38
|
+
// Position of the work in flight, so a throw can say where it stopped.
|
|
39
|
+
let atGroup;
|
|
40
|
+
let atTask;
|
|
41
|
+
const failed = (err) => ({
|
|
42
|
+
status: "failed",
|
|
43
|
+
error: err instanceof Error ? err.message : String(err),
|
|
44
|
+
atGroup,
|
|
45
|
+
atTask,
|
|
46
|
+
...counts,
|
|
47
|
+
});
|
|
48
|
+
try {
|
|
49
|
+
// Scope the duplicate search to the epic being published to. Publishing to
|
|
50
|
+
// a story or task keeps the project-wide view: there is no epic to scope
|
|
51
|
+
// to, and narrowing it would be a guess.
|
|
52
|
+
const epicId = ticketType === "epic" ? ticketId : undefined;
|
|
53
|
+
const existingStories = await client.listProjectStories(projectId, epicId);
|
|
54
|
+
const storyIdByTitle = new Map();
|
|
55
|
+
for (const s of existingStories.stories || []) {
|
|
56
|
+
storyIdByTitle.set(s.title.toLowerCase().trim(), s.id);
|
|
57
|
+
}
|
|
58
|
+
for (const group of taskGroups) {
|
|
59
|
+
const groupTitle = group.title.trim();
|
|
60
|
+
if (!groupTitle)
|
|
61
|
+
continue;
|
|
62
|
+
atGroup = groupTitle;
|
|
63
|
+
atTask = undefined;
|
|
64
|
+
let storyId;
|
|
65
|
+
const existingStoryId = storyIdByTitle.get(groupTitle.toLowerCase());
|
|
66
|
+
if (existingStoryId) {
|
|
67
|
+
storyId = existingStoryId;
|
|
68
|
+
counts.storiesSkipped++;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const created = await client.createStory({
|
|
72
|
+
project_id: projectId,
|
|
73
|
+
epic_id: epicId,
|
|
74
|
+
title: groupTitle,
|
|
75
|
+
labels: ["openspec-sync"],
|
|
76
|
+
openspec_change_id: changeId,
|
|
77
|
+
});
|
|
78
|
+
storyId = created.id;
|
|
79
|
+
storyIdByTitle.set(groupTitle.toLowerCase(), storyId);
|
|
80
|
+
counts.storiesCreated++;
|
|
81
|
+
}
|
|
82
|
+
const existingTasks = await client.listProjectTasks(projectId, storyId);
|
|
83
|
+
const taskInfoByTitle = new Map();
|
|
84
|
+
for (const t of existingTasks.tasks || []) {
|
|
85
|
+
taskInfoByTitle.set(t.title.toLowerCase().trim(), { id: t.id, key: t.key });
|
|
86
|
+
}
|
|
87
|
+
for (const task of group.tasks) {
|
|
88
|
+
const taskTitle = task.text.trim();
|
|
89
|
+
if (!taskTitle)
|
|
90
|
+
continue;
|
|
91
|
+
atTask = taskTitle;
|
|
92
|
+
const existing = taskInfoByTitle.get(taskTitle.toLowerCase());
|
|
93
|
+
if (existing) {
|
|
94
|
+
// Record the mapping for already-present tasks too, so the uploaded
|
|
95
|
+
// JSON links every task to its ticket, not only the new ones.
|
|
96
|
+
task.ticket_id = existing.id;
|
|
97
|
+
task.ticket_key = existing.key;
|
|
98
|
+
counts.tasksSkipped++;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const created = await client.createTask({
|
|
102
|
+
project_id: projectId,
|
|
103
|
+
story_id: storyId,
|
|
104
|
+
title: taskTitle,
|
|
105
|
+
labels: ["openspec-sync"],
|
|
106
|
+
});
|
|
107
|
+
if (!created.ok) {
|
|
108
|
+
// A refusal is a failure. It used to be ignored on the grounds that
|
|
109
|
+
// a create through `story_id` is always accepted, which made a 4xx
|
|
110
|
+
// vanish and left the hierarchy quietly short.
|
|
111
|
+
return failed(new Error(`createTask refused with ${created.status} ${created.error}` +
|
|
112
|
+
(created.message ? `: ${created.message}` : "")));
|
|
113
|
+
}
|
|
114
|
+
task.ticket_id = created.id;
|
|
115
|
+
task.ticket_key = created.key;
|
|
116
|
+
counts.tasksCreated++;
|
|
117
|
+
}
|
|
118
|
+
atTask = undefined;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return failed(err);
|
|
123
|
+
}
|
|
124
|
+
return { status: "ok", ...counts };
|
|
125
|
+
}
|
|
126
|
+
/** One line describing the outcome, for the tool's summary message. */
|
|
127
|
+
export function describeTaskSync(outcome) {
|
|
128
|
+
switch (outcome.status) {
|
|
129
|
+
case "skipped":
|
|
130
|
+
return `task sync skipped (${outcome.reason})`;
|
|
131
|
+
case "ok":
|
|
132
|
+
return (`task sync ok: ${outcome.storiesCreated} stories + ${outcome.tasksCreated} tasks created, ` +
|
|
133
|
+
`${outcome.storiesSkipped} stories + ${outcome.tasksSkipped} tasks already present`);
|
|
134
|
+
case "failed": {
|
|
135
|
+
const where = outcome.atGroup
|
|
136
|
+
? ` while working on "${outcome.atGroup}"${outcome.atTask ? ` → "${outcome.atTask}"` : ""}`
|
|
137
|
+
: "";
|
|
138
|
+
return (`TASK SYNC FAILED${where}: ${outcome.error}. ` +
|
|
139
|
+
`Created ${outcome.storiesCreated} stories and ${outcome.tasksCreated} tasks before stopping — ` +
|
|
140
|
+
`the hierarchy is incomplete.`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=taskSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSync.js","sourceRoot":"","sources":["../../../src/tools/openspec-viz/taskSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSync.test.d.ts","sourceRoot":"","sources":["../../../src/tools/openspec-viz/taskSync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { syncTaskGroups } from "./taskSync.js";
|
|
3
|
+
/**
|
|
4
|
+
* A fake ticket API.
|
|
5
|
+
*
|
|
6
|
+
* Stories and tasks are kept as flat rows so a test can seed a story under
|
|
7
|
+
* *another* epic — which is the whole point of the dedup-scoping tests. The
|
|
8
|
+
* real client's `listProjectStories(projectId)` returns every story in the
|
|
9
|
+
* project regardless of epic, so a fake that silently scoped by epic would
|
|
10
|
+
* make the bug untestable.
|
|
11
|
+
*/
|
|
12
|
+
function makeClient(seed = {}) {
|
|
13
|
+
const stories = [...(seed.stories ?? [])].map((s, i) => ({
|
|
14
|
+
key: `S-${i}`,
|
|
15
|
+
status: "backlog",
|
|
16
|
+
...s,
|
|
17
|
+
}));
|
|
18
|
+
const tasks = [...(seed.tasks ?? [])].map((t, i) => ({
|
|
19
|
+
key: `T-${i}`,
|
|
20
|
+
status: "backlog",
|
|
21
|
+
...t,
|
|
22
|
+
}));
|
|
23
|
+
let n = 0;
|
|
24
|
+
const calls = {
|
|
25
|
+
listStoriesEpicId: [],
|
|
26
|
+
};
|
|
27
|
+
const client = {
|
|
28
|
+
async listProjectStories(_projectId, epicId) {
|
|
29
|
+
calls.listStoriesEpicId.push(epicId);
|
|
30
|
+
// Mirrors the server: filter by epic only when asked to.
|
|
31
|
+
const rows = epicId ? stories.filter((s) => s.epic_id === epicId) : stories;
|
|
32
|
+
return { stories: rows.map((s) => ({ ...s })) };
|
|
33
|
+
},
|
|
34
|
+
async listProjectTasks(_projectId, storyId) {
|
|
35
|
+
const rows = storyId ? tasks.filter((t) => t.story_id === storyId) : tasks;
|
|
36
|
+
return { tasks: rows.map((t) => ({ ...t })) };
|
|
37
|
+
},
|
|
38
|
+
async createStory(p) {
|
|
39
|
+
const row = {
|
|
40
|
+
id: `story-${++n}`,
|
|
41
|
+
key: `NEW-S${n}`,
|
|
42
|
+
title: p.title,
|
|
43
|
+
status: "backlog",
|
|
44
|
+
epic_id: p.epic_id,
|
|
45
|
+
};
|
|
46
|
+
stories.push(row);
|
|
47
|
+
return { id: row.id, key: row.key };
|
|
48
|
+
},
|
|
49
|
+
async createTask(p) {
|
|
50
|
+
const row = {
|
|
51
|
+
id: `task-${++n}`,
|
|
52
|
+
key: `NEW-T${n}`,
|
|
53
|
+
title: p.title,
|
|
54
|
+
status: "backlog",
|
|
55
|
+
story_id: p.story_id,
|
|
56
|
+
};
|
|
57
|
+
tasks.push(row);
|
|
58
|
+
return { ok: true, id: row.id, key: row.key };
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
return { client, stories, tasks, calls };
|
|
62
|
+
}
|
|
63
|
+
const GROUPS = [
|
|
64
|
+
{ title: "Do the thing", tasks: [{ text: "**1.1** first", done: true }] },
|
|
65
|
+
{ title: "Documentation", tasks: [{ text: "**2.1** write it", done: false }] },
|
|
66
|
+
];
|
|
67
|
+
const BASE = {
|
|
68
|
+
projectId: "proj-1",
|
|
69
|
+
ticketType: "epic",
|
|
70
|
+
ticketId: "epic-mine",
|
|
71
|
+
changeId: "some-change",
|
|
72
|
+
};
|
|
73
|
+
describe("syncTaskGroups — reporting the outcome", () => {
|
|
74
|
+
it("reports counts when every group and task is created", async () => {
|
|
75
|
+
const { client } = makeClient();
|
|
76
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
77
|
+
expect(out.status).toBe("ok");
|
|
78
|
+
if (out.status !== "ok")
|
|
79
|
+
return;
|
|
80
|
+
expect(out.storiesCreated).toBe(2);
|
|
81
|
+
expect(out.tasksCreated).toBe(2);
|
|
82
|
+
expect(out.storiesSkipped).toBe(0);
|
|
83
|
+
expect(out.tasksSkipped).toBe(0);
|
|
84
|
+
});
|
|
85
|
+
it("reports a failure instead of swallowing it, and is not mistakable for success", async () => {
|
|
86
|
+
const { client } = makeClient();
|
|
87
|
+
client.createTask = async () => {
|
|
88
|
+
throw new Error("Unexpected token < in JSON at position 0");
|
|
89
|
+
};
|
|
90
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
91
|
+
expect(out.status).toBe("failed");
|
|
92
|
+
if (out.status !== "failed")
|
|
93
|
+
return;
|
|
94
|
+
expect(out.error).toContain("Unexpected token");
|
|
95
|
+
// The bug this test exists for: a thrown sync used to be indistinguishable
|
|
96
|
+
// from one that was never asked for.
|
|
97
|
+
expect(out.status).not.toBe("skipped");
|
|
98
|
+
});
|
|
99
|
+
it("names the group and task it had reached, so a partial hierarchy is attributable", async () => {
|
|
100
|
+
const { client } = makeClient();
|
|
101
|
+
const realCreate = client.createTask;
|
|
102
|
+
client.createTask = async (p) => {
|
|
103
|
+
if (p.title.includes("2.1"))
|
|
104
|
+
throw new Error("boom");
|
|
105
|
+
return realCreate(p);
|
|
106
|
+
};
|
|
107
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
108
|
+
expect(out.status).toBe("failed");
|
|
109
|
+
if (out.status !== "failed")
|
|
110
|
+
return;
|
|
111
|
+
expect(out.atGroup).toBe("Documentation");
|
|
112
|
+
expect(out.atTask).toContain("2.1");
|
|
113
|
+
// Work completed before the throw is still reported, not lost.
|
|
114
|
+
expect(out.storiesCreated).toBe(2);
|
|
115
|
+
expect(out.tasksCreated).toBe(1);
|
|
116
|
+
});
|
|
117
|
+
it("distinguishes a sync that was never requested", async () => {
|
|
118
|
+
const { client } = makeClient();
|
|
119
|
+
const out = await syncTaskGroups({
|
|
120
|
+
...BASE,
|
|
121
|
+
client,
|
|
122
|
+
taskGroups: GROUPS,
|
|
123
|
+
enabled: false,
|
|
124
|
+
});
|
|
125
|
+
expect(out.status).toBe("skipped");
|
|
126
|
+
});
|
|
127
|
+
it("treats a refused createTask as a failure, not a silent skip", async () => {
|
|
128
|
+
const { client } = makeClient();
|
|
129
|
+
client.createTask = async () => ({
|
|
130
|
+
ok: false,
|
|
131
|
+
status: 400,
|
|
132
|
+
error: "hierarchy_required",
|
|
133
|
+
});
|
|
134
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
135
|
+
expect(out.status).toBe("failed");
|
|
136
|
+
if (out.status !== "failed")
|
|
137
|
+
return;
|
|
138
|
+
expect(out.error).toContain("hierarchy_required");
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe("syncTaskGroups — story dedup is scoped to the epic", () => {
|
|
142
|
+
it("does not attach to a story with the same title under a different epic", async () => {
|
|
143
|
+
const { client, stories, tasks } = makeClient({
|
|
144
|
+
stories: [{ id: "foreign-doc", title: "Documentation", epic_id: "epic-other" }],
|
|
145
|
+
});
|
|
146
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
147
|
+
expect(out.status).toBe("ok");
|
|
148
|
+
// A new Documentation story under OUR epic.
|
|
149
|
+
const mine = stories.filter((s) => s.title === "Documentation" && s.epic_id === "epic-mine");
|
|
150
|
+
expect(mine).toHaveLength(1);
|
|
151
|
+
// And nothing was filed against the foreign one.
|
|
152
|
+
expect(tasks.filter((t) => t.story_id === "foreign-doc")).toHaveLength(0);
|
|
153
|
+
expect(tasks.filter((t) => t.story_id === mine[0].id)).toHaveLength(1);
|
|
154
|
+
});
|
|
155
|
+
it("still reuses this epic's own story", async () => {
|
|
156
|
+
const { client, stories } = makeClient({
|
|
157
|
+
stories: [{ id: "mine-doc", title: "Documentation", epic_id: "epic-mine" }],
|
|
158
|
+
});
|
|
159
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
160
|
+
expect(out.status).toBe("ok");
|
|
161
|
+
if (out.status !== "ok")
|
|
162
|
+
return;
|
|
163
|
+
expect(out.storiesSkipped).toBe(1);
|
|
164
|
+
expect(stories.filter((s) => s.title === "Documentation" && s.epic_id === "epic-mine")).toHaveLength(1);
|
|
165
|
+
});
|
|
166
|
+
it("asks the server for only this epic's stories when publishing to an epic", async () => {
|
|
167
|
+
const { client, calls } = makeClient();
|
|
168
|
+
await syncTaskGroups({ ...BASE, client, taskGroups: GROUPS });
|
|
169
|
+
expect(calls.listStoriesEpicId).toEqual(["epic-mine"]);
|
|
170
|
+
});
|
|
171
|
+
it("does not scope when the target is not an epic", async () => {
|
|
172
|
+
const { client, calls } = makeClient();
|
|
173
|
+
await syncTaskGroups({
|
|
174
|
+
...BASE,
|
|
175
|
+
client,
|
|
176
|
+
taskGroups: GROUPS,
|
|
177
|
+
ticketType: "story",
|
|
178
|
+
});
|
|
179
|
+
expect(calls.listStoriesEpicId).toEqual([undefined]);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe("syncTaskGroups — ticket mappings", () => {
|
|
183
|
+
it("writes ticket ids back onto the task groups, for created and existing alike", async () => {
|
|
184
|
+
const { client } = makeClient({
|
|
185
|
+
stories: [{ id: "mine-doc", title: "Documentation", epic_id: "epic-mine" }],
|
|
186
|
+
tasks: [{ id: "existing-21", title: "**2.1** write it", story_id: "mine-doc" }],
|
|
187
|
+
});
|
|
188
|
+
const groups = JSON.parse(JSON.stringify(GROUPS));
|
|
189
|
+
const out = await syncTaskGroups({ ...BASE, client, taskGroups: groups });
|
|
190
|
+
expect(out.status).toBe("ok");
|
|
191
|
+
if (out.status !== "ok")
|
|
192
|
+
return;
|
|
193
|
+
expect(out.tasksSkipped).toBe(1);
|
|
194
|
+
expect(groups[0].tasks[0].ticket_id).toBeTruthy();
|
|
195
|
+
expect(groups[1].tasks[0].ticket_id).toBe("existing-21");
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
//# sourceMappingURL=taskSync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSync.test.js","sourceRoot":"","sources":["../../../src/tools/openspec-viz/taskSync.test.ts"],"names":[],"mappings":"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"}
|
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtG,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAS3C;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIpC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtG,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAS3C;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIpC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA0D9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgErB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,IAAI;IAUZ;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;;;;;;;;OAUG;IACH,eAAe,IAAI,WAAW;IAO9B;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAWhF;;;;;;;OAOG;IACH,cAAc,IAAI,WAAW;IAU7B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;CAuBd"}
|
package/dist/websocket.js
CHANGED
|
@@ -63,10 +63,17 @@ export class WebSocketClient {
|
|
|
63
63
|
console.error("[AgentHub] Failed to parse WebSocket message:", error);
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
|
-
|
|
66
|
+
// The close code and reason are kept, not dropped (AGHUB-1436). This
|
|
67
|
+
// handler took no arguments and logged one fixed line, so a network blip,
|
|
68
|
+
// a server restart (1001/1012) and a deliberate refusal (1008) were
|
|
69
|
+
// indistinguishable in the log — and 1008 is the one that will never fix
|
|
70
|
+
// itself by reconnecting.
|
|
71
|
+
this.ws.on("close", (code, reason) => {
|
|
67
72
|
this.isConnecting = false;
|
|
68
73
|
if (!this.isClosing) {
|
|
69
|
-
|
|
74
|
+
const text = reason?.toString("utf8").trim();
|
|
75
|
+
const why = text ? `: ${text}` : "";
|
|
76
|
+
console.error(`[AgentHub] WebSocket disconnected (close ${code}${why}), will reconnect...`);
|
|
70
77
|
this.scheduleReconnect();
|
|
71
78
|
}
|
|
72
79
|
});
|
package/dist/websocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AA8B3B,MAAM,OAAO,eAAe;IAClB,EAAE,GAAqB,IAAI,CAAC;IAC5B,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,OAAO,GAAkB,IAAI,CAAC;IAC9B,iBAAiB,GAAG,CAAC,CAAC;IACtB,oBAAoB,GAAG,CAAC,CAAC;IACzB,cAAc,GAAG,IAAI,CAAC,CAAC,sBAAsB;IAC7C,cAAc,GAA0B,IAAI,CAAC;IAC7C,YAAY,GAAG,KAAK,CAAC;IACrB,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,GAAwB,IAAI,CAAC;IAEjD,yBAAyB;IACjB,WAAW,GAAkB,EAAE,CAAC;IAChC,cAAc,GAAc,EAAE,CAAC;IAEvC,YAAY,OAAe,EAAE,MAAc;QACzC,oCAAoC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO;aACnB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;aACxB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAsB;QAC3B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe;QACrB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,OAAO,EAAE,CAAC;QAEnD,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAuB,EAAE,EAAE;gBAChD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAc,CAAC;oBACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|