huly-mcp-selfhost 2.1.0 → 3.2.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 (200) hide show
  1. package/.env.example +39 -2
  2. package/README.md +462 -16
  3. package/dist/connection.d.ts +8 -0
  4. package/dist/connection.js +13 -1
  5. package/dist/connection.js.map +1 -1
  6. package/dist/env.d.ts +1 -0
  7. package/dist/env.js +17 -0
  8. package/dist/env.js.map +1 -0
  9. package/dist/guard.d.ts +28 -0
  10. package/dist/guard.js +152 -0
  11. package/dist/guard.js.map +1 -0
  12. package/dist/guides/costs.md +48 -0
  13. package/dist/guides/features.md +49 -0
  14. package/dist/guides/onboarding.md +56 -0
  15. package/dist/guides/workflow.md +57 -0
  16. package/dist/index.js +18 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/junit-cli.d.ts +8 -0
  19. package/dist/junit-cli.js +106 -0
  20. package/dist/junit-cli.js.map +1 -0
  21. package/dist/registry.d.ts +18 -0
  22. package/dist/registry.js +318 -0
  23. package/dist/registry.js.map +1 -0
  24. package/dist/resources.d.ts +12 -0
  25. package/dist/resources.js +212 -0
  26. package/dist/resources.js.map +1 -0
  27. package/dist/schemas.d.ts +1269 -17
  28. package/dist/schemas.js +890 -97
  29. package/dist/schemas.js.map +1 -1
  30. package/dist/server.d.ts +27 -1
  31. package/dist/server.js +197 -128
  32. package/dist/server.js.map +1 -1
  33. package/dist/tools/activity.d.ts +10 -0
  34. package/dist/tools/activity.js +62 -0
  35. package/dist/tools/activity.js.map +1 -0
  36. package/dist/tools/agent.d.ts +156 -0
  37. package/dist/tools/agent.js +523 -0
  38. package/dist/tools/agent.js.map +1 -0
  39. package/dist/tools/attachments.d.ts +4 -4
  40. package/dist/tools/calendar.d.ts +49 -0
  41. package/dist/tools/calendar.js +116 -0
  42. package/dist/tools/calendar.js.map +1 -0
  43. package/dist/tools/cards.d.ts +87 -0
  44. package/dist/tools/cards.js +246 -0
  45. package/dist/tools/cards.js.map +1 -0
  46. package/dist/tools/channels.d.ts +76 -7
  47. package/dist/tools/channels.js +86 -5
  48. package/dist/tools/channels.js.map +1 -1
  49. package/dist/tools/comments.d.ts +16 -4
  50. package/dist/tools/comments.js +26 -9
  51. package/dist/tools/comments.js.map +1 -1
  52. package/dist/tools/components.d.ts +5 -5
  53. package/dist/tools/components.js +4 -22
  54. package/dist/tools/components.js.map +1 -1
  55. package/dist/tools/contacts.d.ts +69 -0
  56. package/dist/tools/contacts.js +130 -0
  57. package/dist/tools/contacts.js.map +1 -0
  58. package/dist/tools/crm.d.ts +61 -0
  59. package/dist/tools/crm.js +117 -0
  60. package/dist/tools/crm.js.map +1 -0
  61. package/dist/tools/documents.d.ts +35 -12
  62. package/dist/tools/documents.js +107 -22
  63. package/dist/tools/documents.js.map +1 -1
  64. package/dist/tools/drive.d.ts +107 -0
  65. package/dist/tools/drive.js +277 -0
  66. package/dist/tools/drive.js.map +1 -0
  67. package/dist/tools/fields.d.ts +33 -0
  68. package/dist/tools/fields.js +124 -0
  69. package/dist/tools/fields.js.map +1 -0
  70. package/dist/tools/generic.d.ts +72 -0
  71. package/dist/tools/generic.js +242 -0
  72. package/dist/tools/generic.js.map +1 -0
  73. package/dist/tools/github.d.ts +21 -0
  74. package/dist/tools/github.js +80 -0
  75. package/dist/tools/github.js.map +1 -0
  76. package/dist/tools/hr.d.ts +97 -0
  77. package/dist/tools/hr.js +150 -0
  78. package/dist/tools/hr.js.map +1 -0
  79. package/dist/tools/inbox.d.ts +23 -0
  80. package/dist/tools/inbox.js +76 -0
  81. package/dist/tools/inbox.js.map +1 -0
  82. package/dist/tools/inventory.d.ts +61 -0
  83. package/dist/tools/inventory.js +103 -0
  84. package/dist/tools/inventory.js.map +1 -0
  85. package/dist/tools/issues.d.ts +63 -12
  86. package/dist/tools/issues.js +259 -48
  87. package/dist/tools/issues.js.map +1 -1
  88. package/dist/tools/labels.d.ts +52 -4
  89. package/dist/tools/labels.js +86 -4
  90. package/dist/tools/labels.js.map +1 -1
  91. package/dist/tools/log-time.d.ts +15 -1
  92. package/dist/tools/log-time.js +70 -6
  93. package/dist/tools/log-time.js.map +1 -1
  94. package/dist/tools/meetings.d.ts +30 -0
  95. package/dist/tools/meetings.js +78 -0
  96. package/dist/tools/meetings.js.map +1 -0
  97. package/dist/tools/members.d.ts +1 -1
  98. package/dist/tools/members.js +17 -1
  99. package/dist/tools/members.js.map +1 -1
  100. package/dist/tools/message-templates.d.ts +54 -0
  101. package/dist/tools/message-templates.js +88 -0
  102. package/dist/tools/message-templates.js.map +1 -0
  103. package/dist/tools/milestones.d.ts +9 -9
  104. package/dist/tools/organizations.d.ts +5 -5
  105. package/dist/tools/organizations.js +2 -1
  106. package/dist/tools/organizations.js.map +1 -1
  107. package/dist/tools/overview.d.ts +55 -0
  108. package/dist/tools/overview.js +395 -0
  109. package/dist/tools/overview.js.map +1 -0
  110. package/dist/tools/planner.d.ts +60 -0
  111. package/dist/tools/planner.js +145 -0
  112. package/dist/tools/planner.js.map +1 -0
  113. package/dist/tools/process.d.ts +50 -0
  114. package/dist/tools/process.js +137 -0
  115. package/dist/tools/process.js.map +1 -0
  116. package/dist/tools/products.d.ts +17 -0
  117. package/dist/tools/products.js +45 -0
  118. package/dist/tools/products.js.map +1 -0
  119. package/dist/tools/projects.d.ts +17 -4
  120. package/dist/tools/projects.js +31 -2
  121. package/dist/tools/projects.js.map +1 -1
  122. package/dist/tools/qms.d.ts +57 -0
  123. package/dist/tools/qms.js +171 -0
  124. package/dist/tools/qms.js.map +1 -0
  125. package/dist/tools/recruiting.d.ts +112 -0
  126. package/dist/tools/recruiting.js +203 -0
  127. package/dist/tools/recruiting.js.map +1 -0
  128. package/dist/tools/relations.d.ts +45 -3
  129. package/dist/tools/relations.js +128 -39
  130. package/dist/tools/relations.js.map +1 -1
  131. package/dist/tools/search.d.ts +14 -1
  132. package/dist/tools/search.js +29 -1
  133. package/dist/tools/search.js.map +1 -1
  134. package/dist/tools/sharing.d.ts +62 -0
  135. package/dist/tools/sharing.js +149 -0
  136. package/dist/tools/sharing.js.map +1 -0
  137. package/dist/tools/statuses.d.ts +3 -3
  138. package/dist/tools/surveys.d.ts +22 -0
  139. package/dist/tools/surveys.js +53 -0
  140. package/dist/tools/surveys.js.map +1 -0
  141. package/dist/tools/templates.d.ts +95 -0
  142. package/dist/tools/templates.js +260 -0
  143. package/dist/tools/templates.js.map +1 -0
  144. package/dist/tools/test-automation.d.ts +81 -0
  145. package/dist/tools/test-automation.js +225 -0
  146. package/dist/tools/test-automation.js.map +1 -0
  147. package/dist/tools/testing.d.ts +234 -0
  148. package/dist/tools/testing.js +401 -0
  149. package/dist/tools/testing.js.map +1 -0
  150. package/dist/tools/workspace-admin.d.ts +55 -0
  151. package/dist/tools/workspace-admin.js +117 -0
  152. package/dist/tools/workspace-admin.js.map +1 -0
  153. package/dist/tools/workspaces.d.ts +1 -1
  154. package/dist/utils/attributes.d.ts +37 -0
  155. package/dist/utils/attributes.js +188 -0
  156. package/dist/utils/attributes.js.map +1 -0
  157. package/dist/utils/classes.d.ts +51 -0
  158. package/dist/utils/classes.js +73 -0
  159. package/dist/utils/classes.js.map +1 -0
  160. package/dist/utils/content.d.ts +11 -0
  161. package/dist/utils/content.js +86 -0
  162. package/dist/utils/content.js.map +1 -0
  163. package/dist/utils/errors.js +1 -1
  164. package/dist/utils/errors.js.map +1 -1
  165. package/dist/utils/files.d.ts +5 -0
  166. package/dist/utils/files.js +50 -0
  167. package/dist/utils/files.js.map +1 -0
  168. package/dist/utils/format.d.ts +2 -0
  169. package/dist/utils/format.js +7 -13
  170. package/dist/utils/format.js.map +1 -1
  171. package/dist/utils/junit.d.ts +13 -0
  172. package/dist/utils/junit.js +81 -0
  173. package/dist/utils/junit.js.map +1 -0
  174. package/dist/utils/markdown.js +9 -4
  175. package/dist/utils/markdown.js.map +1 -1
  176. package/dist/utils/meeting.d.ts +13 -0
  177. package/dist/utils/meeting.js +118 -0
  178. package/dist/utils/meeting.js.map +1 -0
  179. package/dist/utils/people.d.ts +25 -0
  180. package/dist/utils/people.js +80 -0
  181. package/dist/utils/people.js.map +1 -0
  182. package/dist/utils/redact.d.ts +3 -0
  183. package/dist/utils/redact.js +26 -0
  184. package/dist/utils/redact.js.map +1 -0
  185. package/dist/utils/resolve.d.ts +17 -0
  186. package/dist/utils/resolve.js +54 -0
  187. package/dist/utils/resolve.js.map +1 -0
  188. package/dist/utils/spec.d.ts +10 -0
  189. package/dist/utils/spec.js +90 -0
  190. package/dist/utils/spec.js.map +1 -0
  191. package/dist/utils/storage.js +7 -3
  192. package/dist/utils/storage.js.map +1 -1
  193. package/dist/utils/tasks.d.ts +22 -0
  194. package/dist/utils/tasks.js +81 -0
  195. package/dist/utils/tasks.js.map +1 -0
  196. package/dist/watch.d.ts +62 -0
  197. package/dist/watch.js +405 -0
  198. package/dist/watch.js.map +1 -0
  199. package/package.json +4 -3
  200. package/scripts/setup.js +3 -1
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteApplication = exports.updateApplication = exports.createApplication = exports.listApplications = exports.createCandidate = exports.listCandidates = exports.updateVacancy = exports.createVacancy = exports.listVacancies = exports.R = void 0;
4
+ // Recruiting (recruit plugin): vacancies (spaces), candidates (Candidate mixin on persons) and
5
+ // applications (tasks APP-n attached to the candidate, living in the vacancy).
6
+ const core_1 = require("@hcengineering/core");
7
+ const connection_1 = require("../connection");
8
+ const errors_1 = require("../utils/errors");
9
+ const format_1 = require("../utils/format");
10
+ const people_1 = require("../utils/people");
11
+ const tasks_1 = require("../utils/tasks");
12
+ exports.R = {
13
+ Vacancy: 'recruit:class:Vacancy',
14
+ Applicant: 'recruit:class:Applicant',
15
+ Candidate: 'recruit:mixin:Candidate',
16
+ DefaultType: 'recruit:template:DefaultVacancy',
17
+ Person: 'contact:class:Person',
18
+ Contacts: 'contact:space:Contacts'
19
+ };
20
+ async function findVacancy(client, ref) {
21
+ return await (0, tasks_1.findNamed)(client, exports.R.Vacancy, ref, 'Vacancy');
22
+ }
23
+ async function findApplication(client, identifier) {
24
+ const app = await client.findOne(exports.R.Applicant, { identifier: identifier.trim().toUpperCase() });
25
+ if (app == null)
26
+ throw new Error(`Application '${identifier}' not found (ids look like APP-12).`);
27
+ return app;
28
+ }
29
+ exports.listVacancies = (0, errors_1.wrapToolHandler)(async (args) => {
30
+ const client = await (0, connection_1.getConnection)(args.workspace);
31
+ const vacancies = await client.findAll(exports.R.Vacancy, args.includeArchived === true ? {} : { archived: false });
32
+ if (vacancies.length === 0)
33
+ return 'No vacancies.';
34
+ const apps = await client.findAll(exports.R.Applicant, { space: { $in: vacancies.map((v) => v._id) } });
35
+ const lines = [];
36
+ for (const v of vacancies) {
37
+ const company = v.company != null ? (0, tasks_1.contactName)(await client.findOne('contact:class:Organization', { _id: v.company })) : undefined;
38
+ const mine = apps.filter((a) => a.space === v._id);
39
+ const wf = await (0, tasks_1.workflowOf)(client, v).catch(() => undefined);
40
+ const byStatus = new Map();
41
+ for (const a of mine) {
42
+ const n = wf != null ? (0, tasks_1.statusName)(wf, a.status) : '?';
43
+ byStatus.set(n, (byStatus.get(n) ?? 0) + 1);
44
+ }
45
+ const extras = [company, v.location, v.dueTo != null ? `due ${(0, format_1.formatDate)(v.dueTo)}` : undefined, v.archived === true ? 'archived' : undefined].filter((x) => x != null && x !== '');
46
+ lines.push(`- **${String(v.name)}**${extras.length > 0 ? ` (${extras.join(', ')})` : ''} — ${mine.length} application(s)${byStatus.size > 0 ? `: ${[...byStatus].map(([s, n]) => `${n} ${s}`).join(', ')}` : ''} — \`${String(v._id)}\``);
47
+ }
48
+ return `## Vacancies (${vacancies.length})\n\n${lines.join('\n')}`;
49
+ });
50
+ exports.createVacancy = (0, errors_1.wrapToolHandler)(async (args) => {
51
+ const client = await (0, connection_1.getConnection)(args.workspace);
52
+ const existing = await client.findAll(exports.R.Vacancy, {});
53
+ if (existing.some((v) => String(v.name).toLowerCase() === args.name.trim().toLowerCase()))
54
+ throw new Error(`A vacancy named '${args.name}' already exists.`);
55
+ const type = await client.findOne('task:class:ProjectType', { _id: exports.R.DefaultType });
56
+ if (type == null)
57
+ throw new Error('Recruiting is not set up in this workspace (no default vacancy type).');
58
+ const company = args.company != null ? (await (0, tasks_1.findContact)(client, args.company, 'contact:class:Organization'))._id : undefined;
59
+ const me = await (0, people_1.currentAccountUuid)(client);
60
+ const id = (0, core_1.generateId)();
61
+ const number = await (0, tasks_1.nextNumber)(client, exports.R.Vacancy);
62
+ await client.createDoc(exports.R.Vacancy, 'core:space:Space', {
63
+ name: args.name.trim(),
64
+ description: args.description ?? '',
65
+ fullDescription: null,
66
+ private: false,
67
+ archived: false,
68
+ number,
69
+ company,
70
+ location: args.location,
71
+ dueTo: args.dueDate != null ? (0, tasks_1.parseDay)(args.dueDate, 'dueDate') : undefined,
72
+ members: [me],
73
+ owners: [me],
74
+ autoJoin: type.autoJoin ?? false,
75
+ type: exports.R.DefaultType,
76
+ attachments: 0,
77
+ comments: 0
78
+ }, id);
79
+ await client.createMixin(id, exports.R.Vacancy, 'core:space:Space', type.targetClass, {});
80
+ return `✅ Vacancy **${args.name}** created — \`${id}\``;
81
+ });
82
+ exports.updateVacancy = (0, errors_1.wrapToolHandler)(async (args) => {
83
+ const client = await (0, connection_1.getConnection)(args.workspace);
84
+ const v = await findVacancy(client, args.vacancy);
85
+ const update = {};
86
+ if (args.name != null)
87
+ update.name = args.name.trim();
88
+ if (args.description !== undefined)
89
+ update.description = args.description ?? '';
90
+ if (args.location !== undefined)
91
+ update.location = args.location ?? '';
92
+ if (args.dueDate !== undefined)
93
+ update.dueTo = args.dueDate != null ? (0, tasks_1.parseDay)(args.dueDate, 'dueDate') : null;
94
+ if (args.archived != null)
95
+ update.archived = args.archived;
96
+ if (Object.keys(update).length === 0)
97
+ throw new Error('Nothing to change.');
98
+ await client.updateDoc(exports.R.Vacancy, v.space, v._id, update);
99
+ return `✅ Vacancy **${String(update.name ?? v.name)}** updated: ${Object.keys(update).join(', ')}.`;
100
+ });
101
+ exports.listCandidates = (0, errors_1.wrapToolHandler)(async (args) => {
102
+ const client = await (0, connection_1.getConnection)(args.workspace);
103
+ let people = await client.findAll(exports.R.Candidate, {});
104
+ if (args.query != null) {
105
+ const q = args.query.toLowerCase();
106
+ people = people.filter((p) => (0, people_1.formatPersonName)(p.name).toLowerCase().includes(q) || String(p[exports.R.Candidate]?.title ?? '').toLowerCase().includes(q));
107
+ }
108
+ const limit = args.limit ?? 50;
109
+ if (people.length === 0)
110
+ return 'No candidates.';
111
+ const lines = people.slice(0, limit).map((p) => {
112
+ const c = p[exports.R.Candidate] ?? {};
113
+ const where = [c.onsite === true ? 'onsite' : undefined, c.remote === true ? 'remote' : undefined, p.city].filter((x) => x != null && x !== '');
114
+ return `- **${(0, people_1.formatPersonName)(p.name)}**${c.title != null && c.title !== '' ? ` — ${String(c.title)}` : ''}${where.length > 0 ? ` (${where.join(', ')})` : ''} · ${Number(c.applications ?? 0)} application(s) — \`${String(p._id)}\``;
115
+ });
116
+ return `## Candidates (${people.length})\n\n${lines.join('\n')}${people.length > limit ? `\n… ${people.length - limit} more` : ''}`;
117
+ });
118
+ exports.createCandidate = (0, errors_1.wrapToolHandler)(async (args) => {
119
+ const client = await (0, connection_1.getConnection)(args.workspace);
120
+ const name = `${args.lastName.trim()},${args.firstName.trim()}`;
121
+ const dup = await client.findAll(exports.R.Person, { name });
122
+ if (dup.length > 0)
123
+ throw new Error(`A person named ${args.firstName} ${args.lastName} already exists (\`${String(dup[0]._id)}\`) — use create_application with that name.`);
124
+ const id = (0, core_1.generateId)();
125
+ await client.createDoc(exports.R.Person, exports.R.Contacts, { name, city: args.city ?? '', channels: 0, avatarType: 'color' }, id);
126
+ await client.createMixin(id, exports.R.Person, exports.R.Contacts, exports.R.Candidate, { title: args.title ?? '', onsite: args.onsite ?? false, remote: args.remote ?? false, skills: 0 });
127
+ if (args.email != null)
128
+ await client.addCollection('contact:class:Channel', exports.R.Contacts, id, exports.R.Person, 'channels', { value: args.email.trim(), provider: 'contact:channelProvider:Email' });
129
+ return `✅ Candidate **${args.firstName} ${args.lastName}** created — \`${id}\``;
130
+ });
131
+ exports.listApplications = (0, errors_1.wrapToolHandler)(async (args) => {
132
+ const client = await (0, connection_1.getConnection)(args.workspace);
133
+ const query = {};
134
+ let vacancies;
135
+ if (args.vacancy != null) {
136
+ const v = await findVacancy(client, args.vacancy);
137
+ vacancies = [v];
138
+ query.space = v._id;
139
+ }
140
+ else
141
+ vacancies = await client.findAll(exports.R.Vacancy, {});
142
+ const apps = await client.findAll(exports.R.Applicant, query, { sort: { modifiedOn: core_1.SortingOrder.Descending }, limit: args.limit ?? 50 });
143
+ if (apps.length === 0)
144
+ return 'No applications.';
145
+ const names = await (0, people_1.peopleNames)(client);
146
+ const persons = await client.findAll(exports.R.Person, { _id: { $in: [...new Set(apps.map((a) => a.attachedTo))] } });
147
+ const wfs = new Map();
148
+ for (const v of vacancies)
149
+ wfs.set(v._id, await (0, tasks_1.workflowOf)(client, v).catch(() => undefined));
150
+ const rows = apps.map((a) => {
151
+ const v = vacancies.find((x) => x._id === a.space);
152
+ const wf = wfs.get(a.space);
153
+ return { a, status: wf != null ? (0, tasks_1.statusName)(wf, a.status) : '?', v };
154
+ }).filter((r) => args.status == null || r.status.toLowerCase() === args.status.toLowerCase());
155
+ const lines = rows.map(({ a, status, v }) => `- **${String(a.identifier)}** ${(0, tasks_1.contactName)(persons.find((p) => p._id === a.attachedTo))} → ${String(v?.name ?? '?')} [${status}]${a.assignee != null ? ` · ${names.get(a.assignee) ?? '?'}` : ''} · ${(0, format_1.formatDate)(a.modifiedOn)}`);
156
+ return `## Applications (${rows.length})\n\n${lines.join('\n') || '_(none with that status)_'}`;
157
+ });
158
+ exports.createApplication = (0, errors_1.wrapToolHandler)(async (args) => {
159
+ const client = await (0, connection_1.getConnection)(args.workspace);
160
+ const vacancy = await findVacancy(client, args.vacancy);
161
+ const person = await (0, tasks_1.findContact)(client, args.candidate, exports.R.Person);
162
+ const wf = await (0, tasks_1.workflowOf)(client, vacancy);
163
+ const status = (0, tasks_1.pickStatus)(wf, args.status);
164
+ const assignee = args.assignee != null ? (await (0, people_1.findPerson)(client, args.assignee))._id : null;
165
+ const existing = await client.findOne(exports.R.Applicant, { space: vacancy._id, attachedTo: person._id });
166
+ if (existing != null)
167
+ throw new Error(`${(0, tasks_1.contactName)(person)} already applied to ${String(vacancy.name)} (${String(existing.identifier)}).`);
168
+ if (person[exports.R.Candidate] == null)
169
+ await client.createMixin(person._id, person._class, person.space, exports.R.Candidate, {});
170
+ const number = await (0, tasks_1.nextNumber)(client, exports.R.Applicant);
171
+ const identifier = `APP-${number}`;
172
+ await client.addCollection(exports.R.Applicant, vacancy._id, person._id, exports.R.Candidate, 'applications', {
173
+ status, number, identifier, rank: '', kind: wf.kind, assignee, startDate: null, dueDate: null, isDone: false
174
+ });
175
+ return `✅ **${identifier}**: ${(0, tasks_1.contactName)(person)} → ${String(vacancy.name)} [${(0, tasks_1.statusName)(wf, status)}]`;
176
+ });
177
+ exports.updateApplication = (0, errors_1.wrapToolHandler)(async (args) => {
178
+ const client = await (0, connection_1.getConnection)(args.workspace);
179
+ const app = await findApplication(client, args.identifier);
180
+ const update = {};
181
+ const done = [];
182
+ if (args.status != null) {
183
+ const vacancy = await client.findOne(exports.R.Vacancy, { _id: app.space });
184
+ const wf = await (0, tasks_1.workflowOf)(client, vacancy);
185
+ update.status = (0, tasks_1.pickStatus)(wf, args.status);
186
+ done.push(`status → ${(0, tasks_1.statusName)(wf, update.status)}`);
187
+ }
188
+ if (args.assignee !== undefined) {
189
+ update.assignee = args.assignee != null ? (await (0, people_1.findPerson)(client, args.assignee))._id : null;
190
+ done.push(args.assignee != null ? `assignee → ${args.assignee}` : 'unassigned');
191
+ }
192
+ if (Object.keys(update).length === 0)
193
+ throw new Error('Nothing to change.');
194
+ await client.updateDoc(exports.R.Applicant, app.space, app._id, update);
195
+ return `✅ **${String(app.identifier)}**: ${done.join(', ')}.`;
196
+ });
197
+ exports.deleteApplication = (0, errors_1.wrapToolHandler)(async (args) => {
198
+ const client = await (0, connection_1.getConnection)(args.workspace);
199
+ const app = await findApplication(client, args.identifier);
200
+ await client.removeCollection(exports.R.Applicant, app.space, app._id, app.attachedTo, app.attachedToClass, app.collection ?? 'applications');
201
+ return `🗑️ Application **${String(app.identifier)}** deleted.`;
202
+ });
203
+ //# sourceMappingURL=recruiting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recruiting.js","sourceRoot":"","sources":["../../src/tools/recruiting.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
+ import { type Issue } from '@hcengineering/tracker';
1
2
  export declare const addRelation: (args: {
2
3
  workspace: string;
3
4
  identifier: string;
4
5
  relatedTo: string;
5
6
  }) => Promise<{
6
7
  content: Array<{
7
- type: "text";
8
+ type: 'text';
8
9
  text: string;
9
10
  }>;
10
11
  }>;
@@ -14,17 +15,58 @@ export declare const addBlockedBy: (args: {
14
15
  blockedBy: string;
15
16
  }) => Promise<{
16
17
  content: Array<{
17
- type: "text";
18
+ type: 'text';
18
19
  text: string;
19
20
  }>;
20
21
  }>;
22
+ /**
23
+ * Sets or clears the parent the way Huly's own UI does (SetParentIssueActionPopup): only
24
+ * `attachedTo` (and the rank among the new siblings) is written. The server derives
25
+ * `parents`, `subIssues` and `childInfo` from it.
26
+ *
27
+ * Before 2.2.0 this tool wrote `parents`/`childInfo` directly and left `attachedTo` at
28
+ * NoParent, so the sub-issue did not appear under its parent in Huly. Running set_parent
29
+ * again on such an issue repairs it.
30
+ */
21
31
  export declare const setParent: (args: {
22
32
  workspace: string;
23
33
  identifier: string;
24
34
  parentIdentifier?: string | null | undefined;
25
35
  }) => Promise<{
26
36
  content: Array<{
27
- type: "text";
37
+ type: 'text';
38
+ text: string;
39
+ }>;
40
+ }>;
41
+ /** True if the issue was linked by set_parent <= 2.1 (parents written, attachedTo left at NoParent). */
42
+ export declare function isLegacyLink(issue: Issue): boolean;
43
+ export declare const repairParentLinks: (args: {
44
+ workspace: string;
45
+ projectIdentifier: string;
46
+ dryRun: boolean;
47
+ }) => Promise<{
48
+ content: Array<{
49
+ type: 'text';
50
+ text: string;
51
+ }>;
52
+ }>;
53
+ export declare const removeRelation: (args: {
54
+ workspace: string;
55
+ identifier: string;
56
+ relatedTo: string;
57
+ }) => Promise<{
58
+ content: Array<{
59
+ type: 'text';
60
+ text: string;
61
+ }>;
62
+ }>;
63
+ export declare const removeBlockedBy: (args: {
64
+ workspace: string;
65
+ identifier: string;
66
+ blockedBy: string;
67
+ }) => Promise<{
68
+ content: Array<{
69
+ type: 'text';
28
70
  text: string;
29
71
  }>;
30
72
  }>;
@@ -3,8 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.setParent = exports.addBlockedBy = exports.addRelation = void 0;
6
+ exports.removeBlockedBy = exports.removeRelation = exports.repairParentLinks = exports.setParent = exports.addBlockedBy = exports.addRelation = void 0;
7
+ exports.isLegacyLink = isLegacyLink;
7
8
  const tracker_1 = __importDefault(require("@hcengineering/tracker"));
9
+ const core_1 = require("@hcengineering/core");
10
+ const rank_1 = require("@hcengineering/rank");
8
11
  const connection_1 = require("../connection");
9
12
  const errors_1 = require("../utils/errors");
10
13
  exports.addRelation = (0, errors_1.wrapToolHandler)(async (args) => {
@@ -48,56 +51,142 @@ exports.addBlockedBy = (0, errors_1.wrapToolHandler)(async (args) => {
48
51
  });
49
52
  return `✅ **${args.identifier}** is now blocked by **${args.blockedBy}**`;
50
53
  });
54
+ /**
55
+ * Sets or clears the parent the way Huly's own UI does (SetParentIssueActionPopup): only
56
+ * `attachedTo` (and the rank among the new siblings) is written. The server derives
57
+ * `parents`, `subIssues` and `childInfo` from it.
58
+ *
59
+ * Before 2.2.0 this tool wrote `parents`/`childInfo` directly and left `attachedTo` at
60
+ * NoParent, so the sub-issue did not appear under its parent in Huly. Running set_parent
61
+ * again on such an issue repairs it.
62
+ */
51
63
  exports.setParent = (0, errors_1.wrapToolHandler)(async (args) => {
52
64
  const client = await (0, connection_1.getConnection)(args.workspace);
53
65
  const child = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
54
66
  if (child == null)
55
67
  throw new Error(`Issue '${args.identifier}' not found.`);
56
- // Clear parent if requested
57
68
  if (args.parentIdentifier == null) {
58
- await client.updateDoc(tracker_1.default.class.Issue, child.space, child._id, { parents: [] });
59
- // Remove from old parent's childInfo if there was one
60
- if (child.parents.length > 0) {
61
- const oldParentId = child.parents[0].parentId;
62
- const oldParent = await client.findOne(tracker_1.default.class.Issue, { _id: oldParentId });
63
- if (oldParent != null) {
64
- const newChildInfo = (oldParent.childInfo ?? []).filter((c) => c.childId !== child._id);
65
- await client.updateDoc(tracker_1.default.class.Issue, oldParent.space, oldParent._id, {
66
- subIssues: Math.max(0, (oldParent.subIssues ?? 1) - 1),
67
- childInfo: newChildInfo
68
- });
69
- }
70
- }
71
- return `✅ Cleared parent from **${args.identifier}**`;
69
+ const result = await linkToParent(client, child, null);
70
+ return result === 'unchanged' ? `**${args.identifier}** has no parent.` : `✅ Cleared parent from **${args.identifier}**`;
72
71
  }
73
72
  const parent = await client.findOne(tracker_1.default.class.Issue, { identifier: args.parentIdentifier });
74
73
  if (parent == null)
75
74
  throw new Error(`Parent issue '${args.parentIdentifier}' not found.`);
75
+ const result = await linkToParent(client, child, parent);
76
+ if (result === 'unchanged')
77
+ return `**${args.identifier}** is already a sub-issue of **${args.parentIdentifier}**.`;
78
+ return `✅ **${args.identifier}** is now a sub-issue of **${args.parentIdentifier}**${result === 'repaired' ? ' (repaired link from an older version)' : ''}`;
79
+ });
80
+ /** True if the issue was linked by set_parent <= 2.1 (parents written, attachedTo left at NoParent). */
81
+ function isLegacyLink(issue) {
82
+ return issue.attachedTo === tracker_1.default.ids.NoParent && (issue.parents ?? []).length > 0;
83
+ }
84
+ /**
85
+ * Links `child` under `parent` (or detaches it for null) the way Huly's UI does: only
86
+ * attachedTo and rank are written, the server derives parents/subIssues/childInfo.
87
+ */
88
+ async function linkToParent(client, child, parent) {
89
+ const legacy = isLegacyLink(child);
90
+ // Linked by set_parent <= 2.1: parents/childInfo/subIssues were written by hand while
91
+ // attachedTo stayed NoParent. Undo that bookkeeping first, otherwise the server's own
92
+ // counting on the attachedTo change would count this child twice.
93
+ const undoLegacy = async () => {
94
+ const old = await client.findOne(tracker_1.default.class.Issue, { _id: child.parents[0].parentId });
95
+ if (old == null)
96
+ return;
97
+ const childInfo = (old.childInfo ?? []).filter((c) => c.childId !== child._id);
98
+ const removed = (old.childInfo ?? []).length - childInfo.length;
99
+ await client.updateDoc(tracker_1.default.class.Issue, old.space, old._id, {
100
+ childInfo,
101
+ subIssues: Math.max(0, (old.subIssues ?? 0) - Math.max(removed, 1))
102
+ });
103
+ };
104
+ if (parent == null) {
105
+ if (child.attachedTo === tracker_1.default.ids.NoParent && (child.parents ?? []).length === 0)
106
+ return 'unchanged';
107
+ if (legacy)
108
+ await undoLegacy();
109
+ await client.update(child, { attachedTo: tracker_1.default.ids.NoParent, parents: [] });
110
+ return 'cleared';
111
+ }
76
112
  if (parent._id === child._id)
77
113
  throw new Error('An issue cannot be its own parent.');
78
- const parentInfo = {
79
- parentId: parent._id,
80
- identifier: parent.identifier,
81
- parentTitle: parent.title,
82
- space: parent.space
83
- };
84
- const childInfoEntry = {
85
- childId: child._id,
86
- estimation: child.estimation ?? 0,
87
- reportedTime: child.reportedTime ?? 0
88
- };
89
- // Update child's parents list
90
- await client.updateDoc(tracker_1.default.class.Issue, child.space, child._id, {
91
- parents: [parentInfo, ...child.parents]
92
- });
93
- // Update parent's subIssues count and childInfo
94
- const existingChildInfo = parent.childInfo ?? [];
95
- if (!existingChildInfo.some((c) => c.childId === child._id)) {
96
- await client.updateDoc(tracker_1.default.class.Issue, parent.space, parent._id, {
97
- subIssues: (parent.subIssues ?? 0) + 1,
98
- childInfo: [...existingChildInfo, childInfoEntry]
99
- });
114
+ if ((parent.parents ?? []).some((p) => p.parentId === child._id)) {
115
+ throw new Error(`${parent.identifier} is a sub-issue of ${child.identifier} — that would create a cycle.`);
100
116
  }
101
- return `✅ **${args.identifier}** is now a sub-issue of **${args.parentIdentifier}**`;
117
+ if (child.attachedTo === parent._id)
118
+ return 'unchanged';
119
+ const lastSibling = await client.findOne(tracker_1.default.class.Issue, { attachedTo: parent._id }, { sort: { rank: core_1.SortingOrder.Descending } });
120
+ if (legacy)
121
+ await undoLegacy();
122
+ await client.update(child, { attachedTo: parent._id, rank: (0, rank_1.makeRank)(lastSibling?.rank, undefined) });
123
+ return legacy ? 'repaired' : 'linked';
124
+ }
125
+ exports.repairParentLinks = (0, errors_1.wrapToolHandler)(async (args) => {
126
+ const client = await (0, connection_1.getConnection)(args.workspace);
127
+ const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
128
+ if (project == null)
129
+ throw new Error(`Project '${args.projectIdentifier}' not found.`);
130
+ const issues = await client.findAll(tracker_1.default.class.Issue, { space: project._id });
131
+ const byId = new Map(issues.map((i) => [i._id, i]));
132
+ const legacy = issues.filter(isLegacyLink);
133
+ if (legacy.length === 0)
134
+ return `No broken parent links in ${args.projectIdentifier}.`;
135
+ const lines = [];
136
+ let repaired = 0;
137
+ let skipped = 0;
138
+ for (const child of legacy) {
139
+ const parentRef = child.parents[0];
140
+ const parent = byId.get(parentRef.parentId) ?? await client.findOne(tracker_1.default.class.Issue, { _id: parentRef.parentId });
141
+ if (parent == null) {
142
+ skipped++;
143
+ lines.push(`- ${child.identifier}: parent ${parentRef.identifier} no longer exists — skipped`);
144
+ continue;
145
+ }
146
+ if (args.dryRun) {
147
+ lines.push(`- ${child.identifier} → under ${parent.identifier}`);
148
+ continue;
149
+ }
150
+ await linkToParent(client, child, parent);
151
+ repaired++;
152
+ lines.push(`- ${child.identifier} → under ${parent.identifier} ✅`);
153
+ }
154
+ const head = args.dryRun
155
+ ? `## Dry run: ${legacy.length - skipped} sub-issue(s) in ${args.projectIdentifier} would be re-linked${skipped > 0 ? `, ${skipped} skipped` : ''}\nRun again with dryRun=false to apply.`
156
+ : `## Repaired ${repaired} sub-issue link(s) in ${args.projectIdentifier}${skipped > 0 ? `, ${skipped} skipped` : ''}`;
157
+ return `${head}\n\n${lines.join('\n')}`;
158
+ });
159
+ exports.removeRelation = (0, errors_1.wrapToolHandler)(async (args) => {
160
+ const client = await (0, connection_1.getConnection)(args.workspace);
161
+ const issueA = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
162
+ if (issueA == null)
163
+ throw new Error(`Issue '${args.identifier}' not found.`);
164
+ const issueB = await client.findOne(tracker_1.default.class.Issue, { identifier: args.relatedTo });
165
+ if (issueB == null)
166
+ throw new Error(`Issue '${args.relatedTo}' not found.`);
167
+ const aHas = (issueA.relations ?? []).some((r) => r._id === issueB._id);
168
+ const bHas = (issueB.relations ?? []).some((r) => r._id === issueA._id);
169
+ if (!aHas && !bHas)
170
+ return `**${args.identifier}** and **${args.relatedTo}** are not related.`;
171
+ // add_relation links both directions; remove both.
172
+ if (aHas)
173
+ await client.updateDoc(tracker_1.default.class.Issue, issueA.space, issueA._id, { relations: (issueA.relations ?? []).filter((r) => r._id !== issueB._id) });
174
+ if (bHas)
175
+ await client.updateDoc(tracker_1.default.class.Issue, issueB.space, issueB._id, { relations: (issueB.relations ?? []).filter((r) => r._id !== issueA._id) });
176
+ return `✅ **${args.identifier}** and **${args.relatedTo}** are no longer related`;
177
+ });
178
+ exports.removeBlockedBy = (0, errors_1.wrapToolHandler)(async (args) => {
179
+ const client = await (0, connection_1.getConnection)(args.workspace);
180
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
181
+ if (issue == null)
182
+ throw new Error(`Issue '${args.identifier}' not found.`);
183
+ const blocker = await client.findOne(tracker_1.default.class.Issue, { identifier: args.blockedBy });
184
+ if (blocker == null)
185
+ throw new Error(`Issue '${args.blockedBy}' not found.`);
186
+ const existing = issue.blockedBy ?? [];
187
+ if (!existing.some((r) => r._id === blocker._id))
188
+ return `**${args.identifier}** is not blocked by **${args.blockedBy}**.`;
189
+ await client.updateDoc(tracker_1.default.class.Issue, issue.space, issue._id, { blockedBy: existing.filter((r) => r._id !== blocker._id) });
190
+ return `✅ **${args.identifier}** is no longer blocked by **${args.blockedBy}**`;
102
191
  });
103
192
  //# sourceMappingURL=relations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/tools/relations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../src/tools/relations.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,23 @@
1
1
  export declare const searchIssues: (args: {
2
+ workspace?: string | undefined;
2
3
  query: string;
3
4
  limit: number;
5
+ }) => Promise<{
6
+ content: Array<{
7
+ type: 'text';
8
+ text: string;
9
+ }>;
10
+ }>;
11
+ /** Friendly kinds for the workspace-wide search; anything else is passed through as a class id. */
12
+ export declare const SEARCH_KINDS: Record<string, string>;
13
+ export declare const searchAll: (args: {
4
14
  workspace?: string | undefined;
15
+ query: string;
16
+ kinds?: string[] | undefined;
17
+ limit: number;
5
18
  }) => Promise<{
6
19
  content: Array<{
7
- type: "text";
20
+ type: 'text';
8
21
  text: string;
9
22
  }>;
10
23
  }>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.searchIssues = void 0;
6
+ exports.searchAll = exports.SEARCH_KINDS = exports.searchIssues = void 0;
7
7
  const tracker_1 = __importDefault(require("@hcengineering/tracker"));
8
8
  const connection_1 = require("../connection");
9
9
  const errors_1 = require("../utils/errors");
@@ -29,4 +29,32 @@ exports.searchIssues = (0, errors_1.wrapToolHandler)(async (args) => {
29
29
  });
30
30
  return `## Search results for "${args.query}" (${lines.length})\n\n${lines.join('\n')}`;
31
31
  });
32
+ /** Friendly kinds for the workspace-wide search; anything else is passed through as a class id. */
33
+ exports.SEARCH_KINDS = {
34
+ issue: 'tracker:class:Issue',
35
+ document: 'document:class:Document',
36
+ message: 'chunter:class:ChatMessage',
37
+ card: 'card:class:Card',
38
+ file: 'drive:class:File',
39
+ person: 'contact:class:Person',
40
+ organization: 'contact:class:Organization',
41
+ 'test-case': 'testManagement:class:TestCase',
42
+ attachment: 'attachment:class:Attachment'
43
+ };
44
+ const shortClass = (c) => c.split(':').pop() ?? c;
45
+ exports.searchAll = (0, errors_1.wrapToolHandler)(async (args) => {
46
+ const client = await (0, connection_1.getConnection)(args.workspace);
47
+ const classes = args.kinds?.map((k) => exports.SEARCH_KINDS[k] ?? k);
48
+ const result = await client.searchFulltext({ query: args.query, ...(classes != null && classes.length > 0 ? { classes } : {}) }, { limit: args.limit });
49
+ const docs = result.docs ?? [];
50
+ if (docs.length === 0)
51
+ return `Nothing found for "${args.query}". (Needs Huly's fulltext indexer; very new changes may not be indexed yet.)`;
52
+ const lines = docs.map((r) => {
53
+ const title = r.shortTitle != null && r.title != null && r.shortTitle !== r.title ? `${r.shortTitle}: ${r.title}` : (r.title ?? r.shortTitle ?? '(untitled)');
54
+ const where = r.doc?.attachedTo != null ? ` · on \`${r.doc.attachedTo}\`` : '';
55
+ const desc = r.description != null && r.description !== '' ? `\n ${String(r.description).replace(/\s+/g, ' ').slice(0, 160)}` : '';
56
+ return `- [${shortClass(r.doc?._class ?? '')}] **${String(title)}** — \`${String(r.id)}\`${where}${desc}`;
57
+ });
58
+ return `## Search "${args.query}" (${docs.length}${result.total != null && result.total > docs.length ? ` of ${result.total}` : ''})\n\n${lines.join('\n')}`;
59
+ });
32
60
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":";;;;;;AAAA,qEAA4C;AAC5C,8CAA6C;AAC7C,4CAAiD;AACjD,4CAA2D;AAI9C,QAAA,YAAY,GAAG,IAAA,wBAAe,EAAqC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC7F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EACrD,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CACtB,CAAA;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,+BAA+B,IAAI,CAAC,KAAK,GAAG,CAAA;IAEjF,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAS,EAAE,CAAC,CAAA;QAC7E,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QACrF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS,EAAE,CAAA;IACzD,CAAC,CAAC,CACH,CAAA;IAED,MAAM,KAAK,GAAG,QAAQ;SACnB,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;SACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,IAAA,mBAAU,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACnF,OAAO,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,CAAC,UAAU,MAAM,IAAA,sBAAa,EAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACvH,CAAC,CAAC,CAAA;IAEJ,OAAO,0BAA0B,IAAI,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACzF,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}