devops-mcp-server-extension 1.0.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.
Files changed (102) hide show
  1. package/LICENSE +218 -0
  2. package/README.md +527 -0
  3. package/README.zh-cn.md +503 -0
  4. package/dist/common/errors.js +77 -0
  5. package/dist/common/modularTemplates.js +483 -0
  6. package/dist/common/pipelineTemplates.js +19 -0
  7. package/dist/common/toolsetManager.js +123 -0
  8. package/dist/common/toolsets.js +23 -0
  9. package/dist/common/types.js +60 -0
  10. package/dist/common/utils.js +381 -0
  11. package/dist/common/version.js +1 -0
  12. package/dist/index.js +225 -0
  13. package/dist/operations/appstack/appOrchestrations.js +260 -0
  14. package/dist/operations/appstack/appTags.js +168 -0
  15. package/dist/operations/appstack/appTemplates.js +72 -0
  16. package/dist/operations/appstack/applications.js +171 -0
  17. package/dist/operations/appstack/changeOrders.js +320 -0
  18. package/dist/operations/appstack/changeRequests.js +288 -0
  19. package/dist/operations/appstack/deploymentResources.js +286 -0
  20. package/dist/operations/appstack/globalVars.js +221 -0
  21. package/dist/operations/appstack/releaseWorkflows.js +695 -0
  22. package/dist/operations/appstack/variableGroups.js +245 -0
  23. package/dist/operations/codeup/branches.js +157 -0
  24. package/dist/operations/codeup/changeRequestComments.js +140 -0
  25. package/dist/operations/codeup/changeRequests.js +230 -0
  26. package/dist/operations/codeup/commits.js +121 -0
  27. package/dist/operations/codeup/compare.js +30 -0
  28. package/dist/operations/codeup/files.js +249 -0
  29. package/dist/operations/codeup/repositories.js +71 -0
  30. package/dist/operations/codeup/types.js +414 -0
  31. package/dist/operations/flow/hostGroup.js +52 -0
  32. package/dist/operations/flow/pipeline.js +609 -0
  33. package/dist/operations/flow/pipelineJob.js +126 -0
  34. package/dist/operations/flow/resourceMember.js +137 -0
  35. package/dist/operations/flow/serviceConnection.js +27 -0
  36. package/dist/operations/flow/tag.js +191 -0
  37. package/dist/operations/flow/types.js +523 -0
  38. package/dist/operations/flow/vmDeployOrder.js +171 -0
  39. package/dist/operations/organization/members.js +106 -0
  40. package/dist/operations/organization/organization.js +110 -0
  41. package/dist/operations/organization/types.js +111 -0
  42. package/dist/operations/packages/artifacts.js +71 -0
  43. package/dist/operations/packages/repositories.js +39 -0
  44. package/dist/operations/packages/types.js +56 -0
  45. package/dist/operations/projex/effort.js +122 -0
  46. package/dist/operations/projex/project.js +243 -0
  47. package/dist/operations/projex/sprint.js +103 -0
  48. package/dist/operations/projex/types.js +618 -0
  49. package/dist/operations/projex/workitem.js +826 -0
  50. package/dist/operations/testhub/testcases.js +240 -0
  51. package/dist/operations/testhub/testplans.js +128 -0
  52. package/dist/tool-handlers/appstack-app-release-workflows.js +103 -0
  53. package/dist/tool-handlers/appstack-change-orders.js +55 -0
  54. package/dist/tool-handlers/appstack-change-requests.js +49 -0
  55. package/dist/tool-handlers/appstack-deployment-resources.js +31 -0
  56. package/dist/tool-handlers/appstack-global-vars.js +37 -0
  57. package/dist/tool-handlers/appstack-orchestrations.js +49 -0
  58. package/dist/tool-handlers/appstack-release-workflows.js +37 -0
  59. package/dist/tool-handlers/appstack-tags.js +37 -0
  60. package/dist/tool-handlers/appstack-templates.js +19 -0
  61. package/dist/tool-handlers/appstack-variable-groups.js +55 -0
  62. package/dist/tool-handlers/appstack.js +37 -0
  63. package/dist/tool-handlers/base.js +25 -0
  64. package/dist/tool-handlers/code-management.js +150 -0
  65. package/dist/tool-handlers/commit.js +31 -0
  66. package/dist/tool-handlers/effort.js +103 -0
  67. package/dist/tool-handlers/index.js +119 -0
  68. package/dist/tool-handlers/organization.js +72 -0
  69. package/dist/tool-handlers/packages.js +32 -0
  70. package/dist/tool-handlers/pipeline.js +289 -0
  71. package/dist/tool-handlers/project-management.js +201 -0
  72. package/dist/tool-handlers/resourceMember.js +43 -0
  73. package/dist/tool-handlers/service-connections.js +16 -0
  74. package/dist/tool-handlers/tag.js +64 -0
  75. package/dist/tool-handlers/test-management.js +74 -0
  76. package/dist/tool-handlers/vmDeployOrder.js +50 -0
  77. package/dist/tool-registry/appstack-app-release-workflows.js +80 -0
  78. package/dist/tool-registry/appstack-change-orders.js +40 -0
  79. package/dist/tool-registry/appstack-change-requests.js +35 -0
  80. package/dist/tool-registry/appstack-deployment-resources.js +20 -0
  81. package/dist/tool-registry/appstack-global-vars.js +25 -0
  82. package/dist/tool-registry/appstack-orchestrations.js +35 -0
  83. package/dist/tool-registry/appstack-release-workflows.js +25 -0
  84. package/dist/tool-registry/appstack-tags.js +25 -0
  85. package/dist/tool-registry/appstack-templates.js +10 -0
  86. package/dist/tool-registry/appstack-variable-groups.js +40 -0
  87. package/dist/tool-registry/appstack.js +25 -0
  88. package/dist/tool-registry/base.js +19 -0
  89. package/dist/tool-registry/code-management.js +109 -0
  90. package/dist/tool-registry/commit.js +20 -0
  91. package/dist/tool-registry/effort.js +39 -0
  92. package/dist/tool-registry/index.js +7 -0
  93. package/dist/tool-registry/organization.js +65 -0
  94. package/dist/tool-registry/packages.js +21 -0
  95. package/dist/tool-registry/pipeline.js +190 -0
  96. package/dist/tool-registry/project-management.js +143 -0
  97. package/dist/tool-registry/resourceMember.js +29 -0
  98. package/dist/tool-registry/service-connections.js +10 -0
  99. package/dist/tool-registry/tag.js +44 -0
  100. package/dist/tool-registry/test-management.js +59 -0
  101. package/dist/tool-registry/vmDeployOrder.js +34 -0
  102. package/package.json +52 -0
@@ -0,0 +1,618 @@
1
+ import { z } from "zod";
2
+ import { UserInfoSchema } from "../organization/types.js";
3
+ // Custom field related types
4
+ export const FieldItemSchema = z.object({
5
+ displayValue: z.string().nullable().optional().describe("Display value"),
6
+ identifier: z.string().nullable().optional().describe("Identifier"),
7
+ });
8
+ export const CustomFieldValuesSchema = z.object({
9
+ fieldId: z.string().nullable().optional().describe("Custom field ID"),
10
+ fieldName: z.string().nullable().optional().describe("Custom field name"),
11
+ values: z.array(FieldItemSchema).nullable().optional().describe("Values"),
12
+ });
13
+ export const ValueSchema = z.object({
14
+ displayValue: z.string().nullable().optional().describe("Display value"),
15
+ identifier: z.string().nullable().optional().describe("Identifier"),
16
+ });
17
+ export const CustomFieldValueSchema = z.object({
18
+ fieldFormat: z.string().nullable().optional().describe("Field format"),
19
+ fieldId: z.string().nullable().optional().describe("Field ID"),
20
+ fieldName: z.string().nullable().optional().describe("Field name"),
21
+ values: z.array(ValueSchema).nullable().optional().describe("Values"),
22
+ });
23
+ // Project related types
24
+ export const ProjectStatusInfoSchema = z.object({
25
+ id: z.string().nullable().optional().describe("Status ID"),
26
+ name: z.string().nullable().optional().describe("Status name"),
27
+ });
28
+ export const ProjectInfoSchema = z.object({
29
+ id: z.string().nullable().optional().describe("Project ID, unique identifier for the project"),
30
+ name: z.string().nullable().optional().describe("Project name"),
31
+ description: z.string().nullable().optional().describe("Project description"),
32
+ icon: z.string().nullable().optional().describe("Icon URL"),
33
+ customCode: z.string().nullable().optional().describe("Code number"),
34
+ gmtCreate: z.number().int().nullable().optional().describe("Creation timestamp in milliseconds"),
35
+ gmtModified: z.number().int().nullable().optional().describe("Last update timestamp in milliseconds"),
36
+ logicalStatus: z.string().nullable().optional().describe("Logical status, e.g., normal"),
37
+ scope: z.string().nullable().optional().describe("Public type, enum values: public, private"),
38
+ creator: UserInfoSchema.nullable().optional().describe("Creator"),
39
+ modifier: UserInfoSchema.nullable().optional().describe("Modifier"),
40
+ status: ProjectStatusInfoSchema.nullable().optional().describe("Status"),
41
+ customFieldValues: z.array(CustomFieldValuesSchema).nullable().optional().describe("Custom field values"),
42
+ logoUrl: z.string().nullable().optional().describe("Project logo URL"),
43
+ isArchived: z.boolean().nullable().optional().describe("Whether archived"),
44
+ isPublic: z.boolean().nullable().optional().describe("Whether public"),
45
+ accessLevel: z.string().nullable().optional().describe("Access level"),
46
+ organizationIdentifier: z.string().nullable().optional().describe("Organization identifier"),
47
+ includeSubOrgs: z.boolean().nullable().optional().describe("Whether to include sub-organizations"),
48
+ isTemplate: z.boolean().nullable().optional().describe("Whether it's a template"),
49
+ parentIdentifier: z.string().nullable().optional().describe("Parent identifier"),
50
+ associatedCodes: z.array(z.string()).nullable().optional().describe("Associated code repositories"),
51
+ associatedCodeSources: z.array(z.string()).nullable().optional().describe("Associated code sources"),
52
+ customField: z.record(z.string(), z.any()).nullable().optional().describe("Custom fields"),
53
+ statusInfo: z.object({
54
+ identifier: z.string().nullable().optional().describe("Status identifier"),
55
+ name: z.string().nullable().optional().describe("Status name"),
56
+ color: z.string().nullable().optional().describe("Status color"),
57
+ type: z.string().nullable().optional().describe("Status type"),
58
+ desc: z.string().nullable().optional().describe("Status description"),
59
+ }).nullable().optional().describe("Status information"),
60
+ });
61
+ // Sprint related types
62
+ export const SprintInfoSchema = z.object({
63
+ id: z.string().optional().describe("Sprint unique identifier"),
64
+ identifier: z.string().optional().describe("Sprint identifier (alias for id)"),
65
+ name: z.string().optional().describe("Sprint name"),
66
+ goal: z.string().optional().describe("Sprint goal"),
67
+ startDate: z.number().nullable().optional().describe("Start date"),
68
+ endDate: z.number().nullable().optional().describe("End date"),
69
+ status: z.string().optional().describe("Status"),
70
+ spaceIdentifier: z.string().optional().describe("Project identifier"),
71
+ organizationIdentifier: z.string().optional().describe("Organization identifier"),
72
+ gmtCreate: z.number().optional().describe("Creation time in milliseconds"),
73
+ gmtModified: z.number().optional().describe("Last modified time in milliseconds"),
74
+ capacityHours: z.number().nullable().optional().describe("Capacity hours"),
75
+ creator: UserInfoSchema.nullable().optional().describe("Creator"),
76
+ description: z.string().optional().describe("Description"),
77
+ locked: z.boolean().optional().describe("Whether locked"),
78
+ modifier: UserInfoSchema.nullable().optional().describe("Modifier"),
79
+ owners: z.array(UserInfoSchema).nullable().optional().describe("Owners"),
80
+ });
81
+ export const SprintSchema = z.object({
82
+ id: z.string().optional().describe("Sprint ID"),
83
+ name: z.string().optional().describe("Sprint name"),
84
+ });
85
+ // List Sprints Schema
86
+ export const ListSprintsSchema = z.object({
87
+ organizationId: z.string().describe("Organization ID"),
88
+ id: z.string().describe("Project unique identifier"),
89
+ status: z.array(z.string()).optional().describe("Filter by status: TODO, DOING, ARCHIVED"),
90
+ page: z.number().int().min(1).optional().describe("Page number"),
91
+ perPage: z.number().int().min(1).max(100).optional().describe("Page size"),
92
+ });
93
+ // Get Sprint Schema
94
+ export const GetSprintSchema = z.object({
95
+ organizationId: z.string().describe("Organization ID"),
96
+ projectId: z.string().describe("Project unique identifier"),
97
+ id: z.string().describe("Sprint unique identifier"),
98
+ });
99
+ // Create Sprint Schema
100
+ export const CreateSprintSchema = z.object({
101
+ organizationId: z.string().describe("Organization ID"),
102
+ projectId: z.string().describe("Project unique identifier"),
103
+ name: z.string().describe("Sprint name"),
104
+ owners: z.array(z.string()).describe("Sprint owner user IDs"),
105
+ startDate: z.string().optional().describe("Date string in YYYY-MM-DD format"),
106
+ endDate: z.string().optional().describe("Date string in YYYY-MM-DD format"),
107
+ description: z.string().optional().describe("Sprint description"),
108
+ capacityHours: z.number().int().optional().describe("Sprint capacity hours"),
109
+ });
110
+ // Update Sprint Schema
111
+ export const UpdateSprintSchema = z.object({
112
+ organizationId: z.string().describe("Organization ID"),
113
+ projectId: z.string().describe("Project unique identifier"),
114
+ id: z.string().describe("Sprint unique identifier"),
115
+ name: z.string().describe("Sprint name"),
116
+ owners: z.array(z.string()).optional().describe("Sprint owner user IDs"),
117
+ startDate: z.string().optional().describe("Date string in YYYY-MM-DD format"),
118
+ endDate: z.string().optional().describe("Date string in YYYY-MM-DD format"),
119
+ description: z.string().optional().describe("Sprint description"),
120
+ capacityHours: z.number().int().optional().describe("Sprint capacity hours"),
121
+ });
122
+ // Work item related types
123
+ export const WorkItemTypeSchema = z.object({
124
+ addUser: z.object({
125
+ id: z.string().nullable().optional().describe("user id"),
126
+ name: z.string().nullable().optional().describe("名称")
127
+ }).nullable().optional(),
128
+ categoryId: z.string().nullable().optional().describe("Unique identifier of the category, e.g., Req, Task, Bug"),
129
+ creator: z.object({
130
+ id: z.string().nullable().optional().describe("User ID"),
131
+ name: z.string().nullable().optional().describe("Name")
132
+ }).nullable().optional(),
133
+ defaultType: z.boolean().nullable().optional().describe("Is it the default type"),
134
+ description: z.string().nullable().optional().describe("Type description"),
135
+ enable: z.boolean().nullable().optional().describe("Is it enabled"),
136
+ gmtAdd: z.string().nullable().optional().describe("Add time"),
137
+ gmtCreate: z.string().nullable().optional().describe("Creation time"),
138
+ id: z.string().describe("Unique identifier of the work item type"),
139
+ name: z.string().nullable().optional().describe("Type name"),
140
+ nameEn: z.string().nullable().optional().describe("English name of the type"),
141
+ systemDefault: z.boolean().nullable().optional().describe("Is it a system default type")
142
+ });
143
+ export const StatusSchema = z.object({
144
+ displayName: z.string().nullable().optional().describe("Display name"),
145
+ id: z.string().nullable().optional().describe("Status ID"),
146
+ name: z.string().nullable().optional().describe("Status name"),
147
+ nameEn: z.string().nullable().optional().describe("English name"),
148
+ });
149
+ export const SpaceSchema = z.object({
150
+ id: z.string().optional().describe("Space ID"),
151
+ name: z.string().optional().describe("Space name"),
152
+ });
153
+ export const LabelSchema = z.object({
154
+ id: z.string().nullable().optional().describe("Label ID"),
155
+ name: z.string().nullable().optional().describe("Label name"),
156
+ color: z.string().nullable().optional().describe("Label color"),
157
+ });
158
+ export const VersionSchema = z.object({
159
+ id: z.string().nullable().optional().describe("Version ID"),
160
+ name: z.string().nullable().optional().describe("Version name"),
161
+ });
162
+ export const WorkItemSchema = z.object({
163
+ id: z.string().describe("Work item ID"),
164
+ subject: z.string().nullable().optional().describe("Title"),
165
+ description: z.string().nullable().optional().describe("Description"),
166
+ gmtCreate: z.number().int().nullable().optional().describe("Creation time in milliseconds"),
167
+ gmtModified: z.number().int().nullable().optional().describe("Last modification time in milliseconds"),
168
+ workitemType: WorkItemTypeSchema.nullable().optional().describe("Work item type"),
169
+ status: StatusSchema.nullable().optional().describe("Status"),
170
+ formatType: z.string().nullable().optional().describe("Description format. Supported values: RICHTEXT (rich text format), MARKDOWN (markdown format)"),
171
+ categoryId: z.string().nullable().optional().describe("Category ID"),
172
+ logicalStatus: z.string().nullable().optional().describe("Logical status, e.g., normal, archived"),
173
+ parentId: z.string().nullable().optional().describe("Parent Work item ID"),
174
+ serialNumber: z.string().nullable().optional().describe("Serial number"),
175
+ statusStageId: z.string().nullable().optional().describe("Status stage ID"),
176
+ updateStatusAt: z.number().int().nullable().optional().describe("Status update time in milliseconds"),
177
+ idPath: z.string().nullable().optional().describe("Work item ID path"),
178
+ assignedTo: UserInfoSchema.nullable().optional().describe("Assignee user ID, multiple values separated by commas. Special value 'self' can be used to represent the current user"),
179
+ creator: UserInfoSchema.nullable().optional().describe("Creator user ID, multiple values separated by commas. Special value 'self' can be used to represent the current user"),
180
+ modifier: UserInfoSchema.nullable().optional().describe("Modifier"),
181
+ verifier: UserInfoSchema.nullable().optional().describe("Verifier"),
182
+ space: SpaceSchema.nullable().optional().describe("Space"),
183
+ sprint: SprintSchema.nullable().optional().describe("Sprint"),
184
+ labels: z.array(LabelSchema).nullable().optional().describe("Labels"),
185
+ participants: z.array(UserInfoSchema).nullable().optional().describe("Participants"),
186
+ trackers: z.array(UserInfoSchema).nullable().optional().describe("Trackers"),
187
+ versions: z.array(VersionSchema).nullable().optional().describe("Versions"),
188
+ customFieldValues: z.array(CustomFieldValueSchema).nullable().optional().describe("Custom field values"),
189
+ identifier: z.string().nullable().optional().describe("Work item identifier"),
190
+ priority: z.string().nullable().optional().describe("Priority"),
191
+ spaceIdentifier: z.string().nullable().optional().describe("Project identifier"),
192
+ organizationIdentifier: z.string().nullable().optional().describe("Organization identifier"),
193
+ parentIdentifier: z.string().nullable().optional().describe("Parent work item identifier"),
194
+ customFields: z.record(z.string(), z.any()).nullable().optional().describe("Custom fields"),
195
+ type: z.string().nullable().optional().describe("Type"),
196
+ });
197
+ // Search condition related types
198
+ export const FilterConditionSchema = z.object({
199
+ className: z.string().optional().describe("Class name"),
200
+ fieldIdentifier: z.string().optional().describe("Field identifier"),
201
+ format: z.string().optional().describe("Format"),
202
+ operator: z.string().optional().describe("Operator"),
203
+ toValue: z.string().nullable().optional().describe("To value"),
204
+ value: z.array(z.string()).nullable().optional().describe("Values"),
205
+ });
206
+ export const ConditionsSchema = z.object({
207
+ conditionGroups: z.array(z.array(z.any())).nullable().optional().describe("Condition groups"),
208
+ });
209
+ // Projex Project related schemas
210
+ export const GetProjectSchema = z.object({
211
+ organizationId: z.string().describe("Organization ID"),
212
+ id: z.string().describe("Project unique identifier"),
213
+ });
214
+ export const SearchProjectsSchema = z.object({
215
+ organizationId: z.string().describe("Organization ID"),
216
+ // Simplified search parameters
217
+ name: z.string().nullable().optional().describe("Text contained in project name"),
218
+ status: z.string().nullish().optional().describe("Project status ID, multiple separated by commas"),
219
+ createdAfter: z.string().nullable().optional().describe("Created not earlier than, format: YYYY-MM-DD"),
220
+ createdBefore: z.string().nullable().optional().describe("Created not later than, format: YYYY-MM-DD"),
221
+ creator: z.string().nullable().optional().describe("Creator"),
222
+ adminUserId: z.string().nullable().optional().describe("Project administrator user ID, should use userId returned from getCurrentOrganizationInfoFunc or user-provided user ID, multiple IDs separated by commas"),
223
+ logicalStatus: z.string().nullable().optional().describe("Logical status, e.g., NORMAL"),
224
+ // Special filter for common scenarios
225
+ scenarioFilter: z.enum(["manage", "participate", "favorite"]).nullable().optional().describe("Predefined filter scenarios: 'manage' (projects I manage), 'participate' (projects I participate in), 'favorite' (projects I favorited). Will be used to construct appropriate extraConditions. Requires userId from getCurrentOrganizationInfoFunc."),
226
+ userId: z.string().nullable().optional().describe("User ID to use with scenarioFilter, should be the userId returned from getCurrentOrganizationInfoFunc"),
227
+ // Advanced parameters
228
+ advancedConditions: z.string().nullable().optional().describe("Advanced filter conditions, JSON format"),
229
+ extraConditions: z.string().nullable().optional().describe("Additional filter conditions as JSON string. Should be constructed similar to the conditions parameter. For common scenarios: 1) For 'projects I manage': use fieldIdentifier 'project.admin' with the user ID; 2) For 'projects I participate in': use fieldIdentifier 'users' with the user ID; 3) For 'projects I favorited': use fieldIdentifier 'collectMembers' with the user ID. Example: JSON.stringify({conditionGroups:[[{className:'user',fieldIdentifier:'project.admin',format:'multiList',operator:'CONTAINS',value:[userId]}]]})"),
230
+ orderBy: z.string().optional().default("gmtCreate").describe("Sort field, default is gmtCreate, supports: gmtCreate (creation time), name (name)"),
231
+ page: z.number().int().default(1).optional().describe("Pagination parameter, page number"),
232
+ perPage: z.number().int().default(20).optional().describe("Pagination parameter, page size, 0-200, default value is 20"),
233
+ sort: z.string().optional().default("desc").describe("Sort order, default is desc, options: desc (descending), asc (ascending)"),
234
+ });
235
+ // Work item related schemas
236
+ export const GetWorkItemSchema = z.object({
237
+ organizationId: z.string().describe("Organization ID, can be found in the basic information page of the organization admin console"),
238
+ workItemId: z.string().describe("Work item unique identifier, required parameter"),
239
+ });
240
+ export const CreateWorkItemSchema = z.object({
241
+ organizationId: z.string().describe("Organization ID"),
242
+ spaceId: z.string().describe("Space ID, project unique identifier"),
243
+ subject: z.string().describe("Work item title"),
244
+ workitemTypeId: z.string().describe("Work item type ID"),
245
+ assignedTo: z.string().describe("Assignee user ID"),
246
+ customFieldValues: z.record(z.string()).optional().describe("Custom field values"),
247
+ description: z.string().optional().describe("Work item description"),
248
+ labels: z.array(z.string()).optional().describe("Associated label IDs"),
249
+ parentId: z.string().optional().describe("Parent work item ID"),
250
+ participants: z.array(z.string()).optional().describe("Participant user IDs"),
251
+ sprint: z.string().optional().describe("Associated sprint ID"),
252
+ trackers: z.array(z.string()).optional().describe("CC user IDs"),
253
+ verifier: z.string().optional().describe("Verifier user ID"),
254
+ versions: z.array(z.string()).optional().describe("Associated version IDs")
255
+ });
256
+ export const SearchWorkitemsSchema = z.object({
257
+ organizationId: z.string().describe("Organization ID"),
258
+ category: z.string().describe("Search for work item types, such as Req (requirement), Task (task), Bug (defect), etc., multiple values separated by commas"),
259
+ spaceId: z.string().describe("Project ID, project unique identifier"),
260
+ // Simplified search parameters
261
+ subject: z.string().nullable().optional().describe("Text contained in the title"),
262
+ status: z.string().nullable().optional().describe("Status ID, multiple separated by commas. Status names and their IDs: Pending Confirmation (28), Pending Processing (100005), Reopened (30), Deferred Fix (34), Confirmed (32), Selected (625489), In Analysis (154395), Analysis Complete (165115), In Progress (100010), In Design (156603), Design Complete (307012), In Development (142838), Development Complete (100011), In Testing (100012)"),
263
+ createdAfter: z.string().nullable().optional().describe("Created not earlier than, format: YYYY-MM-DD"),
264
+ createdBefore: z.string().nullable().optional().describe("Created not later than, format: YYYY-MM-DD"),
265
+ updatedAfter: z.string().nullable().optional().describe("Updated not earlier than, format: YYYY-MM-DD"),
266
+ updatedBefore: z.string().nullable().optional().describe("Updated not later than, format: YYYY-MM-DD"),
267
+ creator: z.string().nullable().optional().describe("Creator user ID, multiple values separated by commas. Special value 'self' can be used to represent the current user"),
268
+ assignedTo: z.string().nullable().optional().describe("Assignee user ID, multiple values separated by commas. Special value 'self' can be used to represent the current user"),
269
+ sprint: z.string().nullable().optional().describe("Sprint ID, multiple values separated by commas"),
270
+ workitemType: z.string().nullable().optional().describe("Work item type ID, multiple values separated by commas"),
271
+ statusStage: z.string().nullable().optional().describe("Status stage ID, multiple values separated by commas"),
272
+ tag: z.string().nullable().optional().describe("Tag ID, multiple values separated by commas"),
273
+ priority: z.string().nullable().optional().describe("Priority ID, multiple values separated by commas"),
274
+ subjectDescription: z.string().nullable().optional().describe("Text contained in title or description"),
275
+ finishTimeAfter: z.string().nullable().optional().describe("Finish time not earlier than, format: YYYY-MM-DD"),
276
+ finishTimeBefore: z.string().nullable().optional().describe("Finish time not later than, format: YYYY-MM-DD"),
277
+ updateStatusAtAfter: z.string().nullable().optional().describe("Status update time not earlier than, format: YYYY-MM-DD"),
278
+ updateStatusAtBefore: z.string().nullable().optional().describe("Status update time not later than, format: YYYY-MM-DD"),
279
+ // Advanced parameters
280
+ advancedConditions: z.string().nullable().optional().describe("Advanced filter conditions, JSON format"),
281
+ orderBy: z.string().optional().default("gmtCreate").describe("Sort field, default is gmtCreate. Possible values: gmtCreate, subject, status, priority, assignedTo"),
282
+ sort: z.string().optional().default("desc").describe("Sort order, default is desc. Possible values: desc (descending), asc (ascending)"),
283
+ page: z.number().int().min(1).optional().describe("Page number, starting from 1. Default is 1"),
284
+ perPage: z.number().int().min(0).max(200).optional().describe("Number of items per page, range 0-200. Default is 20"),
285
+ includeDetails: z.boolean().optional().describe("Set to true when you need work item descriptions/detailed content. This automatically fetches missing descriptions instead of requiring separate get_work_item calls. RECOMMENDED: Use includeDetails=true when user asks for 'detailed content', 'descriptions', or 'full information' of work items. This is more efficient than calling get_work_item multiple times. Default is false")
286
+ });
287
+ // Work item type related schemas
288
+ export const WorkItemTypeDetailSchema = z.object({
289
+ id: z.string().nullable().optional().describe("工作项类型ID"),
290
+ name: z.string().nullable().optional().describe("工作项类型名称"),
291
+ nameEn: z.string().nullable().optional().describe("工作项类型英文名称"),
292
+ category: z.string().nullable().optional().describe("工作项类型分类"),
293
+ description: z.string().nullable().optional().describe("工作项类型描述"),
294
+ icon: z.string().nullable().optional().describe("图标"),
295
+ color: z.string().nullable().optional().describe("颜色"),
296
+ enable: z.boolean().nullable().optional().describe("是否启用"),
297
+ defaultType: z.boolean().nullable().optional().describe("是否默认类型"),
298
+ systemDefault: z.boolean().nullable().optional().describe("是否系统默认"),
299
+ });
300
+ export const ListAllWorkItemTypesSchema = z.object({
301
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
302
+ });
303
+ export const ListWorkItemTypesSchema = z.object({
304
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
305
+ projectId: z.string().describe("项目唯一标识"),
306
+ category: z.string().optional().describe("工作项类型,可选值为 Req,Bug,Task 等。"),
307
+ });
308
+ export const GetWorkItemTypeSchema = z.object({
309
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
310
+ id: z.string().describe("工作项类型ID"),
311
+ });
312
+ export const ListWorkItemRelationWorkItemTypesSchema = z.object({
313
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
314
+ workItemTypeId: z.string().describe("工作项类型ID"),
315
+ relationType: z.enum(["PARENT", "SUB", "ASSOCIATED", "DEPEND_ON", "DEPENDED_BY"]).optional().describe("关联类型,可选值为 PARENT、SUB、ASSOCIATED,DEPEND_ON, DEPENDED_BY 分别对应父项,子项,关联项,依赖项,支撑项。"),
316
+ });
317
+ // Work item comment related schemas
318
+ export const ListWorkItemCommentsSchema = z.object({
319
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
320
+ workItemId: z.string().describe("工作项ID"),
321
+ page: z.number().int().optional().default(1).describe("页码"),
322
+ perPage: z.number().int().optional().default(20).describe("每页条数"),
323
+ });
324
+ export const CreateWorkItemCommentSchema = z.object({
325
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
326
+ workItemId: z.string().describe("工作项ID"),
327
+ content: z.string().describe("评论内容"),
328
+ });
329
+ // Work item activity related schemas
330
+ export const ActivityValueSchema = z.object({
331
+ displayValue: z.string().nullable().optional().describe("显示的名称"),
332
+ identifier: z.string().nullable().optional().describe("值的唯一标识"),
333
+ });
334
+ export const ActivityOperatorSchema = z.object({
335
+ id: z.string().nullable().optional().describe("用户id"),
336
+ name: z.string().nullable().optional().describe("名称"),
337
+ });
338
+ export const ActivityPropertySchema = z.object({
339
+ propertyId: z.string().nullable().optional().describe("属性id"),
340
+ propertyName: z.string().nullable().optional().describe("属性名称"),
341
+ propertyType: z.string().nullable().optional().describe("属性类型, 可选值为 Field,Relation 或是 null"),
342
+ });
343
+ export const ActivityRelatedResourceSchema = z.object({
344
+ resourceId: z.string().nullable().optional().describe("资源id,如果是工作项则是对应的工作项id"),
345
+ resourceType: z.string().nullable().optional().describe("资源对象,如果是工作项则是 Workitem"),
346
+ });
347
+ export const WorkItemActivitySchema = z.object({
348
+ actionType: z.string().nullable().optional().describe("action 类型,可选值为: created, updated, delete, associate, unassociate 分别对应: 创建,更新,删除,关联和解除关联的 action"),
349
+ eventId: z.number().int().nullable().optional().describe("事件id"),
350
+ eventTime: z.union([z.string(), z.number()]).nullable().optional().describe("事件发生时间"),
351
+ eventType: z.string().nullable().optional().describe("事件类型,可选值为: workitem.created, workitem.updated, workitem.transitioned, workitem.association.changed, workitem.attachment.changed 分别对应工作项创建,工作项更新,工作项状态流转,工作项附件变更,工作项关联项变更"),
352
+ newValue: z.array(ActivityValueSchema).nullable().optional().describe("更新后的值,可以为空"),
353
+ oldValue: z.array(ActivityValueSchema).nullable().optional().describe("更新前的值,可以为空"),
354
+ operator: ActivityOperatorSchema.nullable().optional().describe("操作者"),
355
+ parentEventId: z.number().int().nullable().optional().describe("parentEventId"),
356
+ property: ActivityPropertySchema.nullable().optional().describe("属性"),
357
+ relatedResource: ActivityRelatedResourceSchema.nullable().optional().describe("关联资源"),
358
+ resourceId: z.string().nullable().optional().describe("事件发生的资源对象id,工作项则是对应的工作项id"),
359
+ });
360
+ export const ListWorkitemActivitiesSchema = z.object({
361
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
362
+ workItemId: z.string().describe("工作项唯一标识"),
363
+ });
364
+ // Work item attachment related schemas
365
+ export const AttachmentCreatorSchema = z.object({
366
+ id: z.string().nullable().optional().describe("用户id"),
367
+ name: z.string().nullable().optional().describe("名称"),
368
+ });
369
+ export const WorkItemAttachmentSchema = z.object({
370
+ creator: AttachmentCreatorSchema.nullable().optional().describe("创建者"),
371
+ fileId: z.string().nullable().optional().describe("文件id"),
372
+ fileName: z.string().nullable().optional().describe("文件名称"),
373
+ gmtCreate: z.string().nullable().optional().describe("创建时间"),
374
+ gmtModified: z.string().nullable().optional().describe("修改时间"),
375
+ id: z.string().nullable().optional().describe("附件id"),
376
+ modifier: AttachmentCreatorSchema.nullable().optional().describe("修改者"),
377
+ size: z.number().int().nullable().optional().describe("文件大小"),
378
+ suffix: z.string().nullable().optional().describe("文件后缀"),
379
+ url: z.string().nullable().optional().describe("文件下载地址,是个临时的下载地址,有时效性"),
380
+ });
381
+ export const ListWorkitemAttachmentsSchema = z.object({
382
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
383
+ workItemId: z.string().describe("工作项唯一标识"),
384
+ });
385
+ // Work item file related schemas
386
+ export const WorkItemFileSchema = z.object({
387
+ id: z.string().nullable().optional().describe("文件id"),
388
+ name: z.string().nullable().optional().describe("文件名称"),
389
+ size: z.number().int().nullable().optional().describe("文件大小"),
390
+ suffix: z.string().nullable().optional().describe("文件后缀"),
391
+ url: z.string().nullable().optional().describe("文件下载地址,是个临时的下载地址,有时效性"),
392
+ });
393
+ export const GetWorkitemFileSchema = z.object({
394
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
395
+ workItemId: z.string().describe("工作项唯一标识"),
396
+ fileId: z.string().describe("文件唯一标识"),
397
+ });
398
+ // Work item relation related schemas
399
+ export const WorkItemRelationRecordSchema = z.object({
400
+ gmtCreate: z.union([z.string(), z.number()]).nullable().optional().describe("创建关联的时间"),
401
+ id: z.string().nullable().optional().describe("关联详细的id"),
402
+ relationType: z.string().nullable().optional().describe("关联的类型,可选值为 PARENT、SUB、ASSOCIATED、DEPEND_ON、DEPENDED_BY,分别对应父项、子项、关联项、依赖项、支撑项"),
403
+ resourceId: z.string().nullable().optional().describe("关联的资源id"),
404
+ resourceType: z.string().nullable().optional().describe("关联的资源类型"),
405
+ });
406
+ export const ListWorkitemRelationRecordsSchema = z.object({
407
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
408
+ workItemId: z.string().describe("工作项唯一标识"),
409
+ relationType: z.enum(["PARENT", "SUB", "ASSOCIATED", "DEPEND_ON", "DEPENDED_BY"]).describe("关联类型,PARENT-父项,SUB-子项,ASSOCIATED-关联项,DEPEND_ON-依赖项,DEPENDED_BY-支撑项"),
410
+ });
411
+ // Create work item relation record schema
412
+ export const CreateWorkitemRelationRecordSchema = z.object({
413
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
414
+ workItemId: z.string().describe("工作项唯一标识"),
415
+ relationType: z.enum(["PARENT", "SUB", "ASSOCIATED", "DEPEND_ON", "DEPENDED_BY"]).describe("关联类型,PARENT-父项,SUB-子项,ASSOCIATED-关联项,DEPEND_ON-依赖项,DEPENDED_BY-支撑项"),
416
+ relatedWorkitemId: z.string().describe("关联的工作项ID"),
417
+ });
418
+ // Delete work item relation record schema
419
+ export const DeleteWorkitemRelationRecordSchema = z.object({
420
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
421
+ workItemId: z.string().describe("工作项唯一标识"),
422
+ relationType: z.enum(["PARENT", "SUB", "ASSOCIATED", "DEPEND_ON", "DEPENDED_BY"]).describe("关联类型,PARENT-父项,SUB-子项,ASSOCIATED-关联项,DEPEND_ON-依赖项,DEPENDED_BY-支撑项"),
423
+ relatedWorkitemId: z.string().describe("要删除关联的工作项ID"),
424
+ });
425
+ // Work item type field configuration schemas
426
+ export const FieldOptionSchema = z.object({
427
+ id: z.string().nullable().optional().describe("选项ID"),
428
+ name: z.string().nullable().optional().describe("选项名称"),
429
+ value: z.string().nullable().optional().describe("选项值"),
430
+ });
431
+ export const WorkItemTypeFieldConfigSchema = z.object({
432
+ id: z.string().nullable().optional().describe("字段配置ID"),
433
+ workItemTypeId: z.string().nullable().optional().describe("工作项类型ID"),
434
+ fieldId: z.string().nullable().optional().describe("字段ID"),
435
+ fieldName: z.string().nullable().optional().describe("字段名称"),
436
+ fieldType: z.string().nullable().optional().describe("字段类型"),
437
+ required: z.boolean().nullable().optional().describe("是否必填"),
438
+ editable: z.boolean().nullable().optional().describe("是否可编辑"),
439
+ visible: z.boolean().nullable().optional().describe("是否可见"),
440
+ defaultValue: z.string().nullable().optional().describe("默认值"),
441
+ options: z.array(FieldOptionSchema).nullable().optional().describe("选项列表"),
442
+ });
443
+ // Workflow schemas
444
+ export const WorkflowStateSchema = z.object({
445
+ id: z.string().nullable().optional().describe("状态ID"),
446
+ name: z.string().nullable().optional().describe("状态名称"),
447
+ nameEn: z.string().nullable().optional().describe("状态英文名称"),
448
+ color: z.string().nullable().optional().describe("状态颜色"),
449
+ order: z.number().int().nullable().optional().describe("状态顺序"),
450
+ initialState: z.boolean().nullable().optional().describe("是否初始状态"),
451
+ finalState: z.boolean().nullable().optional().describe("是否最终状态"),
452
+ });
453
+ export const TransitionConditionSchema = z.object({
454
+ fieldId: z.string().nullable().optional().describe("字段ID"),
455
+ operator: z.string().nullable().optional().describe("操作符"),
456
+ value: z.string().nullable().optional().describe("值"),
457
+ });
458
+ export const WorkflowTransitionSchema = z.object({
459
+ id: z.string().nullable().optional().describe("转换ID"),
460
+ fromStateId: z.string().nullable().optional().describe("起始状态ID"),
461
+ toStateId: z.string().nullable().optional().describe("目标状态ID"),
462
+ name: z.string().nullable().optional().describe("转换名称"),
463
+ conditions: z.array(TransitionConditionSchema).nullable().optional().describe("转换条件列表"),
464
+ });
465
+ export const WorkItemWorkflowSchema = z.object({
466
+ id: z.string().nullable().optional().describe("工作流ID"),
467
+ name: z.string().nullable().optional().describe("工作流名称"),
468
+ workItemTypeId: z.string().nullable().optional().describe("工作项类型ID"),
469
+ states: z.array(WorkflowStateSchema).nullable().optional().describe("状态列表"),
470
+ transitions: z.array(WorkflowTransitionSchema).nullable().optional().describe("转换列表"),
471
+ });
472
+ export const GetWorkItemTypeFieldConfigSchema = z.object({
473
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
474
+ projectId: z.string().describe("项目唯一标识"),
475
+ workItemTypeId: z.string().describe("工作项类型ID"),
476
+ });
477
+ export const GetWorkItemWorkflowSchema = z.object({
478
+ organizationId: z.string().describe("企业ID,可在组织管理后台的基本信息页面获取"),
479
+ projectId: z.string().describe("项目唯一标识"),
480
+ workItemTypeId: z.string().describe("工作项类型ID"),
481
+ });
482
+ // Update work item schemas
483
+ export const UpdateWorkItemFieldSchema = z.object({
484
+ subject: z.string().optional().describe("工作项标题"),
485
+ description: z.string().optional().describe("工作项描述"),
486
+ status: z.string().optional().describe("状态Id"),
487
+ assignedTo: z.string().optional().describe("指派人userId"),
488
+ priority: z.string().optional().describe("优先级Id"),
489
+ labels: z.array(z.string()).optional().describe("关联的标签id列表"),
490
+ sprint: z.string().optional().describe("关联的迭代Id"),
491
+ trackers: z.array(z.string()).optional().describe("抄送人userId列表"),
492
+ verifier: z.string().optional().describe("验证人userId"),
493
+ participants: z.array(z.string()).optional().describe("参与人userId列表"),
494
+ versions: z.array(z.string()).optional().describe("关联的版本Id列表"),
495
+ customFieldValues: z.record(z.string(), z.any()).optional().describe("自定义字段值,格式为 {\"fieldId\": \"value\"} 或 {\"fieldId\": [\"value1\", \"value2\"]}"),
496
+ });
497
+ export const UpdateWorkItemSchema = z.object({
498
+ organizationId: z.string().describe("Organization ID"),
499
+ workItemId: z.string().describe("Work item ID"),
500
+ updateWorkItemFields: UpdateWorkItemFieldSchema
501
+ });
502
+ // Project Member related types
503
+ export const ProjectMemberSchema = z.object({
504
+ roleId: z.string().nullable().optional().describe("Role unique identifier, e.g., project.admin"),
505
+ roleName: z.string().nullable().optional().describe("Role name, e.g., 管理员"),
506
+ userAvatar: z.string().nullable().optional().describe("User avatar URL"),
507
+ userId: z.string().nullable().optional().describe("User unique identifier"),
508
+ userName: z.string().nullable().optional().describe("User name"),
509
+ });
510
+ export const ListProjectMembersSchema = z.object({
511
+ organizationId: z.string().describe("Organization ID"),
512
+ id: z.string().describe("Project unique identifier"),
513
+ name: z.string().optional().describe("Name filter"),
514
+ roleId: z.string().optional().describe("Role ID filter, e.g., project.admin for administrator"),
515
+ });
516
+ // Effort related types
517
+ export const MiniUserSchema = z.object({
518
+ id: z.string().nullable().optional().describe("用户id"),
519
+ name: z.string().nullable().optional().describe("名称"),
520
+ });
521
+ export const EffortRecordSchema = z.object({
522
+ actualTime: z.number().nullable().optional().describe("时间工时"),
523
+ creator: MiniUserSchema.nullable().optional().describe("创建人"),
524
+ description: z.string().nullable().optional().describe("描述"),
525
+ gmtCreate: z.number().nullable().optional().describe("创建时间"),
526
+ gmtEnd: z.number().nullable().optional().describe("工作的结束日期"),
527
+ gmtModified: z.number().nullable().optional().describe("修改时间"),
528
+ gmtStart: z.number().nullable().optional().describe("工作的开始日期"),
529
+ id: z.string().nullable().optional().describe("id"),
530
+ modifier: MiniUserSchema.nullable().optional().describe("修改人"),
531
+ owner: MiniUserSchema.nullable().optional().describe("负责人"),
532
+ workType: z.string().nullable().optional().describe("工作类别"),
533
+ workitemId: z.string().nullable().optional().describe("工作项id"),
534
+ });
535
+ export const EstimatedEffortSchema = z.object({
536
+ creator: MiniUserSchema.nullable().optional().describe("创建人"),
537
+ description: z.string().nullable().optional().describe("描述"),
538
+ gmtCreate: z.number().nullable().optional().describe("创建时间"),
539
+ gmtModified: z.number().nullable().optional().describe("修改时间"),
540
+ id: z.string().nullable().optional().describe("id"),
541
+ modifier: MiniUserSchema.nullable().optional().describe("修改人"),
542
+ owner: MiniUserSchema.nullable().optional().describe("负责人"),
543
+ spentTime: z.number().nullable().optional().describe("预计工时"),
544
+ workType: z.string().nullable().optional().describe("工作项类别"),
545
+ workitemId: z.string().nullable().optional().describe("工作项id"),
546
+ });
547
+ export const IdentifierDTOSchema = z.object({
548
+ id: z.string().nullable().optional().describe("id"),
549
+ });
550
+ export const CreateEffortRecordRequestSchema = z.object({
551
+ actualTime: z.number().positive().describe("实际工时"),
552
+ description: z.string().max(500).optional().describe("工作描述"),
553
+ gmtEnd: z.string().describe("工作开始结束日期"),
554
+ gmtStart: z.string().describe("工作开始日期"),
555
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
556
+ workType: z.string().optional().describe("工作类型"),
557
+ });
558
+ export const CreateEstimatedEffortRequestSchema = z.object({
559
+ description: z.string().max(500).optional().describe("工作描述"),
560
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
561
+ owner: z.string().describe("负责人,填userId"),
562
+ spentTime: z.number().positive().describe("预计工时"),
563
+ workType: z.string().optional().describe("工作类别"),
564
+ });
565
+ // Effort related schemas
566
+ export const ListCurrentUserEffortRecordsSchema = z.object({
567
+ organizationId: z.string().describe("organizationId"),
568
+ startDate: z.string().describe("工作的开始时间,格式为yyyy-MM-dd"),
569
+ endDate: z.string().describe("工作的结束时间,格式为yyyy-MM-dd"),
570
+ });
571
+ export const ListEffortRecordsSchema = z.object({
572
+ id: z.string().describe("工作项唯一标识"),
573
+ organizationId: z.string().describe("organizationId"),
574
+ });
575
+ export const CreateEffortRecordSchema = z.object({
576
+ id: z.string().describe("工作项唯一标识"),
577
+ organizationId: z.string().describe("organizationId"),
578
+ actualTime: z.number().positive().describe("实际工时"),
579
+ description: z.string().max(500).optional().describe("工作描述"),
580
+ gmtEnd: z.string().describe("工作开始结束日期"),
581
+ gmtStart: z.string().describe("工作开始日期"),
582
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
583
+ workType: z.string().optional().describe("工作类型"),
584
+ });
585
+ export const ListEstimatedEffortsSchema = z.object({
586
+ id: z.string().describe("工作项唯一标识"),
587
+ organizationId: z.string().describe("organizationId"),
588
+ });
589
+ export const CreateEstimatedEffortSchema = z.object({
590
+ id: z.string().describe("工作项唯一标识"),
591
+ organizationId: z.string().describe("organizationId"),
592
+ description: z.string().max(500).optional().describe("工作描述"),
593
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
594
+ owner: z.string().describe("负责人,填userId"),
595
+ spentTime: z.number().positive().describe("预计工时"),
596
+ workType: z.string().optional().describe("工作类别"),
597
+ });
598
+ export const UpdateEffortRecordSchema = z.object({
599
+ organizationId: z.string().describe("organizationId"),
600
+ workitemId: z.string().describe("工作项唯一标识"),
601
+ id: z.string().describe("工时记录唯一标识"),
602
+ actualTime: z.number().positive().describe("实际工时"),
603
+ description: z.string().max(500).optional().describe("工作描述"),
604
+ gmtEnd: z.string().describe("工作开始结束日期"),
605
+ gmtStart: z.string().describe("工作开始日期"),
606
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
607
+ workType: z.string().optional().describe("工作类型"),
608
+ });
609
+ export const UpdateEstimatedEffortSchema = z.object({
610
+ organizationId: z.string().describe("organizationId"),
611
+ workitemId: z.string().describe("工作项唯一标识"),
612
+ id: z.string().describe("预计工时记录唯一标识"),
613
+ description: z.string().max(500).optional().describe("工作描述"),
614
+ operatorId: z.string().optional().describe("操作者的useId,个人token时该参数无效"),
615
+ owner: z.string().describe("负责人,填userId"),
616
+ spentTime: z.number().positive().describe("预计工时"),
617
+ workType: z.string().optional().describe("工作类别"),
618
+ });