@chorus-aidlc/chorus-openclaw-plugin 0.2.1 → 0.2.3
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 +1 -1
- package/src/tools/admin-tools.ts +41 -0
- package/src/tools/pm-tools.ts +2 -6
package/package.json
CHANGED
package/src/tools/admin-tools.ts
CHANGED
|
@@ -44,6 +44,47 @@ export function registerAdminTools(api: any, mcpClient: ChorusMcpClient) {
|
|
|
44
44
|
},
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
+
api.registerTool({
|
|
48
|
+
name: "chorus_admin_approve_proposal",
|
|
49
|
+
description:
|
|
50
|
+
"Approve a Proposal (Admin exclusive). On approval, documentDrafts and taskDrafts are automatically materialized into real Document and Task entities — materialized Tasks can then be claimed and executed by agents. " +
|
|
51
|
+
"⚠️ This action is irreversible — unless there is a special reason, you MUST obtain explicit human approval before calling this tool.",
|
|
52
|
+
parameters: {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {
|
|
55
|
+
proposalUuid: { type: "string", description: "Proposal UUID" },
|
|
56
|
+
reviewNote: { type: "string", description: "Optional review note" },
|
|
57
|
+
},
|
|
58
|
+
required: ["proposalUuid"],
|
|
59
|
+
additionalProperties: false,
|
|
60
|
+
},
|
|
61
|
+
async execute(_id: string, { proposalUuid, reviewNote }: { proposalUuid: string; reviewNote?: string }) {
|
|
62
|
+
const args: Record<string, unknown> = { proposalUuid };
|
|
63
|
+
if (reviewNote) args.reviewNote = reviewNote;
|
|
64
|
+
const result = await mcpClient.callTool("chorus_admin_approve_proposal", args);
|
|
65
|
+
return JSON.stringify(result, null, 2);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
api.registerTool({
|
|
70
|
+
name: "chorus_admin_verify_task",
|
|
71
|
+
description:
|
|
72
|
+
"Verify a Task (to_verify → done, Admin exclusive). Marks a task as completed after verification. Downstream tasks that depend on this task will only be unblocked after it is verified. " +
|
|
73
|
+
"⚠️ This action is irreversible — unless there is a special reason, you MUST obtain explicit human approval before calling this tool.",
|
|
74
|
+
parameters: {
|
|
75
|
+
type: "object",
|
|
76
|
+
properties: {
|
|
77
|
+
taskUuid: { type: "string", description: "Task UUID" },
|
|
78
|
+
},
|
|
79
|
+
required: ["taskUuid"],
|
|
80
|
+
additionalProperties: false,
|
|
81
|
+
},
|
|
82
|
+
async execute(_id: string, { taskUuid }: { taskUuid: string }) {
|
|
83
|
+
const result = await mcpClient.callTool("chorus_admin_verify_task", { taskUuid });
|
|
84
|
+
return JSON.stringify(result, null, 2);
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
|
|
47
88
|
api.registerTool({
|
|
48
89
|
name: "chorus_mark_acceptance_criteria",
|
|
49
90
|
description: "Mark acceptance criteria as passed or failed (admin verification). Blocked criteria prevent task from being verified (to_verify -> done).",
|
package/src/tools/pm-tools.ts
CHANGED
|
@@ -98,7 +98,7 @@ export function registerPmTools(api: any, mcpClient: ChorusMcpClient) {
|
|
|
98
98
|
// 5. chorus_create_proposal
|
|
99
99
|
api.registerTool({
|
|
100
100
|
name: "chorus_create_proposal",
|
|
101
|
-
description: "Create
|
|
101
|
+
description: "Create an empty Proposal container. Use chorus_add_document_draft and chorus_add_task_draft to populate it afterwards.",
|
|
102
102
|
parameters: {
|
|
103
103
|
type: "object",
|
|
104
104
|
properties: {
|
|
@@ -107,19 +107,15 @@ export function registerPmTools(api: any, mcpClient: ChorusMcpClient) {
|
|
|
107
107
|
inputType: { type: "string", description: 'Input source type: "idea" or "document"' },
|
|
108
108
|
inputUuids: { type: "array", description: "Array of input UUIDs", items: { type: "string" } },
|
|
109
109
|
description: { type: "string", description: "Proposal description" },
|
|
110
|
-
documentDrafts: { type: "array", description: "Array of { type, title, content }", items: { type: "object" } },
|
|
111
|
-
taskDrafts: { type: "array", description: "Array of { title, description?, priority?, storyPoints?, acceptanceCriteriaItems?, dependsOnDraftUuids? }", items: { type: "object" } },
|
|
112
110
|
},
|
|
113
111
|
required: ["projectUuid", "title", "inputType", "inputUuids"],
|
|
114
112
|
additionalProperties: false,
|
|
115
113
|
},
|
|
116
114
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
117
|
-
async execute(_id: string, { projectUuid, title, inputType, inputUuids, description
|
|
115
|
+
async execute(_id: string, { projectUuid, title, inputType, inputUuids, description }: any) {
|
|
118
116
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
119
117
|
const args: Record<string, any> = { projectUuid, title, inputType, inputUuids };
|
|
120
118
|
if (description !== undefined) args.description = description;
|
|
121
|
-
if (documentDrafts !== undefined) args.documentDrafts = documentDrafts;
|
|
122
|
-
if (taskDrafts !== undefined) args.taskDrafts = taskDrafts;
|
|
123
119
|
const result = await mcpClient.callTool("chorus_pm_create_proposal", args);
|
|
124
120
|
return JSON.stringify(result, null, 2);
|
|
125
121
|
},
|