engineering-memory 1.11.12 → 1.11.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "engineering-memory",
|
|
3
|
-
"version": "1.11.
|
|
3
|
+
"version": "1.11.13",
|
|
4
4
|
"description": "Installs the Engineering Memory skill and its local MCP bridge. Sign in after installing; your organization and project are resolved from your account.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
package/runtime/build.json
CHANGED
|
@@ -930,15 +930,13 @@ export function registerEngineeringMemoryTools(server, service) {
|
|
|
930
930
|
}),
|
|
931
931
|
}, async (input) => toolResult(await service.workItemCreate(input)));
|
|
932
932
|
server.registerTool('work_item.update', {
|
|
933
|
-
description:
|
|
933
|
+
description: "Edit or assign a work item at its current version. Assignees must already be active project members; this does not grant project access. Status is a slug from the project's own status catalogue; a backend that still keeps the six legacy values (backlog, ready, in_progress, in_review, done, cancelled) refuses anything else and names what it accepts.",
|
|
934
934
|
inputSchema: z.object({
|
|
935
935
|
...workItemLocator,
|
|
936
936
|
data: z.object({
|
|
937
937
|
...workItemFields,
|
|
938
938
|
expectedVersion: z.number().int().min(1),
|
|
939
|
-
status: z
|
|
940
|
-
.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done', 'cancelled'])
|
|
941
|
-
.optional(),
|
|
939
|
+
status: z.string().trim().min(1).max(64).optional(),
|
|
942
940
|
}),
|
|
943
941
|
}),
|
|
944
942
|
}, async (input) => toolResult(await service.workItemUpdate(input)));
|
|
@@ -1016,12 +1014,10 @@ export function registerEngineeringMemoryTools(server, service) {
|
|
|
1016
1014
|
}),
|
|
1017
1015
|
}, async (input) => toolResult(await service.projectUpdate(input)));
|
|
1018
1016
|
server.registerTool('work_item.list', {
|
|
1019
|
-
description:
|
|
1017
|
+
description: "List selectable work items for a project before opening an engineering run in this chat. The status filter is a slug from the project's own status catalogue; a backend that still keeps the six legacy values (backlog, ready, in_progress, in_review, done, cancelled) refuses anything else and names what it accepts.",
|
|
1020
1018
|
inputSchema: z.object({
|
|
1021
1019
|
projectId: z.string().uuid(),
|
|
1022
|
-
status: z
|
|
1023
|
-
.enum(['backlog', 'ready', 'in_progress', 'in_review', 'done', 'cancelled'])
|
|
1024
|
-
.optional(),
|
|
1020
|
+
status: z.string().trim().min(1).max(64).optional(),
|
|
1025
1021
|
priority: z.enum(['lowest', 'low', 'medium', 'high', 'highest']).optional(),
|
|
1026
1022
|
assigneeUserId: z.string().uuid().optional(),
|
|
1027
1023
|
includeArchived: z.boolean().optional(),
|
|
@@ -3544,21 +3544,30 @@ export class BridgeService {
|
|
|
3544
3544
|
}
|
|
3545
3545
|
}
|
|
3546
3546
|
async actionableWorkItems(projectId) {
|
|
3547
|
+
const path = `${endpoints.workItemList(projectId)}?limit=100`;
|
|
3547
3548
|
try {
|
|
3548
|
-
const
|
|
3549
|
-
|
|
3550
|
-
|
|
3549
|
+
const chosen = await this.workItemPage(`${path}&actionable=true`).catch((error) => {
|
|
3550
|
+
if (error instanceof ApiResponseError && error.httpStatus === 400)
|
|
3551
|
+
return null;
|
|
3552
|
+
throw error;
|
|
3553
|
+
});
|
|
3554
|
+
if (chosen && chosen.length > 0)
|
|
3555
|
+
return chosen;
|
|
3556
|
+
const every = await this.workItemPage(path);
|
|
3557
|
+
if (chosen && every.some((entry) => objectValue(objectValue(entry)?.projectStatus) !== null))
|
|
3551
3558
|
return [];
|
|
3552
3559
|
const actionable = new Set(['backlog', 'ready', 'in_progress', 'in_review']);
|
|
3553
|
-
return
|
|
3554
|
-
const item = objectValue(entry);
|
|
3555
|
-
return item ? actionable.has(String(item.status)) : false;
|
|
3556
|
-
});
|
|
3560
|
+
return every.filter((entry) => actionable.has(String(objectValue(entry)?.status)));
|
|
3557
3561
|
}
|
|
3558
3562
|
catch {
|
|
3559
3563
|
return [];
|
|
3560
3564
|
}
|
|
3561
3565
|
}
|
|
3566
|
+
async workItemPage(path) {
|
|
3567
|
+
const response = await this.dependencies.client.request(path);
|
|
3568
|
+
const items = objectValue(response.data)?.items;
|
|
3569
|
+
return Array.isArray(items) ? items : [];
|
|
3570
|
+
}
|
|
3562
3571
|
async clientUpdate(authenticated) {
|
|
3563
3572
|
const installed = this.dependencies.clientVersion;
|
|
3564
3573
|
if (!authenticated) {
|