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
@@ -36,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.removeLabel = exports.addLabel = exports.createLabel = exports.listLabels = void 0;
39
+ exports.setLabelCategory = exports.createLabelCategory = exports.listLabelCategories = exports.deleteLabel = exports.updateLabel = exports.removeLabel = exports.addLabel = exports.createLabel = exports.listLabels = void 0;
40
40
  const tags_1 = __importDefault(require("@hcengineering/tags"));
41
41
  const tracker_1 = __importDefault(require("@hcengineering/tracker"));
42
42
  const core_1 = __importStar(require("@hcengineering/core"));
@@ -44,9 +44,6 @@ const connection_1 = require("../connection");
44
44
  const errors_1 = require("../utils/errors");
45
45
  exports.listLabels = (0, errors_1.wrapToolHandler)(async (args) => {
46
46
  const client = await (0, connection_1.getConnection)(args.workspace);
47
- const query = args.projectIdentifier != null
48
- ? { targetClass: tracker_1.default.class.Issue }
49
- : { targetClass: tracker_1.default.class.Issue };
50
47
  const allLabels = await client.findAll(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue });
51
48
  if (allLabels.length === 0)
52
49
  return 'No labels found in this workspace.';
@@ -147,4 +144,89 @@ exports.removeLabel = (0, errors_1.wrapToolHandler)(async (args) => {
147
144
  await client.removeCollection(tags_1.default.class.TagReference, issue.space, ref._id, issue._id, tracker_1.default.class.Issue, 'labels');
148
145
  return `✅ Removed label **${args.labelName}** from **${args.identifier}**`;
149
146
  });
147
+ async function findLabel(client, title) {
148
+ const label = await client.findOne(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue, title });
149
+ if (label == null)
150
+ throw new Error(`Label '${title}' not found.`);
151
+ return label;
152
+ }
153
+ exports.updateLabel = (0, errors_1.wrapToolHandler)(async (args) => {
154
+ const client = await (0, connection_1.getConnection)(args.workspace);
155
+ const label = await findLabel(client, args.labelName);
156
+ const updates = {};
157
+ if (args.newName !== undefined && args.newName !== label.title) {
158
+ const clash = await client.findOne(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue, title: args.newName });
159
+ if (clash != null)
160
+ throw new Error(`A label named '${args.newName}' already exists.`);
161
+ updates.title = args.newName;
162
+ }
163
+ if (args.color !== undefined)
164
+ updates.color = parseInt(args.color.replace('#', ''), 16);
165
+ if (args.description !== undefined)
166
+ updates.description = args.description;
167
+ if (Object.keys(updates).length === 0)
168
+ return `Nothing to update for label **${label.title}**.`;
169
+ await client.updateDoc(tags_1.default.class.TagElement, label.space, label._id, updates);
170
+ // Issues show the title/color copied into each TagReference — keep them in sync.
171
+ const refUpdates = {};
172
+ if (updates.title !== undefined)
173
+ refUpdates.title = updates.title;
174
+ if (updates.color !== undefined)
175
+ refUpdates.color = updates.color;
176
+ let synced = 0;
177
+ if (Object.keys(refUpdates).length > 0) {
178
+ const refs = await client.findAll(tags_1.default.class.TagReference, { tag: label._id });
179
+ for (const ref of refs) {
180
+ await client.updateCollection(tags_1.default.class.TagReference, ref.space, ref._id, ref.attachedTo, ref.attachedToClass, ref.collection, refUpdates);
181
+ synced++;
182
+ }
183
+ }
184
+ return `✅ Label **${updates.title ?? label.title}** updated (${Object.keys(updates).map((k) => (k === 'title' ? 'name' : k)).join(', ')})${synced > 0 ? ` on ${synced} issue(s)` : ''}.`;
185
+ });
186
+ exports.deleteLabel = (0, errors_1.wrapToolHandler)(async (args) => {
187
+ const client = await (0, connection_1.getConnection)(args.workspace);
188
+ const label = await findLabel(client, args.labelName);
189
+ // Remove the label from every issue first, so no issue keeps a reference to a deleted label.
190
+ const refs = await client.findAll(tags_1.default.class.TagReference, { tag: label._id });
191
+ for (const ref of refs) {
192
+ await client.removeCollection(tags_1.default.class.TagReference, ref.space, ref._id, ref.attachedTo, ref.attachedToClass, ref.collection);
193
+ }
194
+ await client.removeDoc(tags_1.default.class.TagElement, label.space, label._id);
195
+ return `🗑️ Label **${label.title}** deleted${refs.length > 0 ? ` and removed from ${refs.length} issue(s)` : ''}.`;
196
+ });
197
+ // ── Label categories (tags:class:TagCategory) ───────────────────────────────
198
+ exports.listLabelCategories = (0, errors_1.wrapToolHandler)(async (args) => {
199
+ const client = await (0, connection_1.getConnection)(args.workspace);
200
+ const categories = await client.findAll(tags_1.default.class.TagCategory, { targetClass: tracker_1.default.class.Issue });
201
+ const labels = await client.findAll(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue });
202
+ if (categories.length === 0)
203
+ return 'No label categories.';
204
+ const lines = categories.map((c) => {
205
+ const own = labels.filter((l) => l.category === c._id).map((l) => l.title);
206
+ return `- **${String(c.label)}**${c.default === true ? ' (default)' : ''} — ${own.length > 0 ? own.join(', ') : 'no labels'} — \`${String(c._id)}\``;
207
+ });
208
+ const loose = labels.filter((l) => !categories.some((c) => c._id === l.category)).map((l) => l.title);
209
+ return `## Label categories (${categories.length})\n\n${lines.join('\n')}${loose.length > 0 ? `\n\nWithout category: ${loose.join(', ')}` : ''}`;
210
+ });
211
+ exports.createLabelCategory = (0, errors_1.wrapToolHandler)(async (args) => {
212
+ const client = await (0, connection_1.getConnection)(args.workspace);
213
+ const existing = await client.findAll(tags_1.default.class.TagCategory, { targetClass: tracker_1.default.class.Issue });
214
+ const same = existing.find((c) => String(c.label).toLowerCase() === args.name.toLowerCase());
215
+ if (same != null)
216
+ return `ℹ️ Category **${String(same.label)}** already exists — \`${String(same._id)}\`.`;
217
+ const id = await client.createDoc(tags_1.default.class.TagCategory, core_1.default.space.Workspace, { label: args.name, targetClass: tracker_1.default.class.Issue, icon: tags_1.default.icon.Tags, tags: [], default: false });
218
+ return `✅ Label category **${args.name}** created — \`${String(id)}\`.`;
219
+ });
220
+ exports.setLabelCategory = (0, errors_1.wrapToolHandler)(async (args) => {
221
+ const client = await (0, connection_1.getConnection)(args.workspace);
222
+ const label = await client.findOne(tags_1.default.class.TagElement, { targetClass: tracker_1.default.class.Issue, title: args.labelName });
223
+ if (label == null)
224
+ throw new Error(`Label '${args.labelName}' not found.`);
225
+ const categories = await client.findAll(tags_1.default.class.TagCategory, { targetClass: tracker_1.default.class.Issue });
226
+ const cat = categories.find((c) => c._id === args.category || String(c.label).toLowerCase() === args.category.toLowerCase());
227
+ if (cat == null)
228
+ throw new Error(`Category '${args.category}' not found. Available: ${categories.map((c) => c.label).join(', ')}.`);
229
+ await client.updateDoc(tags_1.default.class.TagElement, label.space, label._id, { category: cat._id });
230
+ return `✅ Label **${args.labelName}** is now in category **${String(cat.label)}**.`;
231
+ });
150
232
  //# sourceMappingURL=labels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/tools/labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/tools/labels.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAsC;AACtC,qEAA4C;AAC5C,4DAAgE;AAEhE,8CAA6C;AAC7C,4CAAiD;AAcpC,QAAA,UAAU,GAAG,IAAA,wBAAe,EAAmC,KAAK,EAAE,IAAI,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAElD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAEnG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oCAAoC,CAAA;IAEvE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1F,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,WAAW,CAAC,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,IAAI,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF,OAAO,cAAc,SAAS,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACjE,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAElD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAC3D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAA;IACF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,WAAW,IAAI,CAAC,KAAK,4BAA4B,QAAQ,CAAC,GAAG,MAAM,CAAA;IAC5E,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC5D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;KACjC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,IAAA,iBAAU,GAAc,CAAA;IACxC,MAAM,MAAM,CAAC,SAAS,CACpB,cAAI,CAAC,KAAK,CAAC,UAAU,EACrB,cAAI,CAAC,KAAK,CAAC,SAAS,EACpB;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,cAAI,CAAC,QAAQ,CAAC,UAAU;QACnD,QAAQ,EAAE,CAAC;KACZ,EACD,OAAO,CACR,CAAA;IAED,OAAO,qBAAqB,IAAI,CAAC,KAAK,aAAa,OAAO,KAAK,CAAA;AACjE,CAAC,CAAC,CAAA;AAEW,QAAA,QAAQ,GAAG,IAAA,wBAAe,EAAiC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAElD,aAAa;IACb,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,kCAAkC;IAClC,IAAI,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACtD,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,SAAS;KACtB,CAAC,CAAA;IAEF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAC5D,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;SACjC,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,IAAA,iBAAU,GAAc,CAAA;QACxC,MAAM,MAAM,CAAC,SAAS,CACpB,cAAI,CAAC,KAAK,CAAC,UAAU,EACrB,cAAI,CAAC,KAAK,CAAC,SAAS,EACpB;YACE,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;YAChC,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,cAAI,CAAC,QAAQ,CAAC,UAAU;YACnD,QAAQ,EAAE,CAAC;SACZ,EACD,OAAO,CACR,CAAA;QACD,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QACrE,IAAI,KAAK,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;IACnF,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAC7D,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAA;IACF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,WAAW,IAAI,CAAC,SAAS,sBAAsB,IAAI,CAAC,UAAU,KAAK,CAAA;IAC5E,CAAC;IAED,iCAAiC;IACjC,MAAM,MAAM,CAAC,aAAa,CACxB,cAAI,CAAC,KAAK,CAAC,YAAY,EACvB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,QAAQ,EACR;QACE,GAAG,EAAE,KAAK,CAAC,GAAsB;QACjC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CACF,CAAA;IAED,OAAO,mBAAmB,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,UAAU,IAAI,CAAA;AACxE,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAElD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACxD,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK;QAChC,KAAK,EAAE,IAAI,CAAC,SAAS;KACtB,CAAC,CAAA;IACF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,cAAc,CAAC,CAAA;IAE1E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QACxD,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAA;IACF,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,WAAW,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC,UAAU,KAAK,CAAA;IACxE,CAAC;IAED,MAAM,MAAM,CAAC,gBAAgB,CAC3B,cAAI,CAAC,KAAK,CAAC,YAAY,EACvB,KAAK,CAAC,KAAK,EACX,GAAG,CAAC,GAAG,EACP,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,QAAQ,CACT,CAAA;IAED,OAAO,qBAAqB,IAAI,CAAC,SAAS,aAAa,IAAI,CAAC,UAAU,IAAI,CAAA;AAC5E,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,SAAS,CAAE,MAAiD,EAAE,KAAa;IACxF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IACtG,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,cAAc,CAAC,CAAA;IACjE,OAAO,KAAK,CAAA;AACd,CAAC;AAEY,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAErD,MAAM,OAAO,GAA4B,EAAE,CAAA;IAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACpH,IAAI,KAAK,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,OAAO,mBAAmB,CAAC,CAAA;QACrF,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAA;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACvF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,iCAAiC,KAAK,CAAC,KAAK,KAAK,CAAA;IAE/F,MAAM,MAAM,CAAC,SAAS,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,OAAc,CAAC,CAAA;IAErF,iFAAiF;IACjF,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IACjE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IACjE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,gBAAgB,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,UAAiB,CAAC,CAAA;YAClJ,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC;IAED,OAAO,aAAc,OAAO,CAAC,KAA4B,IAAI,KAAK,CAAC,KAAK,eAAe,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;AAClN,CAAC,CAAC,CAAA;AAEW,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAErD,6FAA6F;IAC7F,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,gBAAgB,CAAC,cAAI,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IACjI,CAAC;IACD,MAAM,MAAM,CAAC,SAAS,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAErE,OAAO,eAAe,KAAK,CAAC,KAAK,aAAa,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;AACrH,CAAC,CAAC,CAAA;AAEF,+EAA+E;AAElE,QAAA,mBAAmB,GAAG,IAAA,wBAAe,EAA4C,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3G,MAAM,MAAM,GAAQ,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvD,MAAM,UAAU,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5G,MAAM,MAAM,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IACvG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,sBAAsB,CAAA;IAC1D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC1E,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,QAAQ,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;IACtJ,CAAC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACrG,OAAO,wBAAwB,UAAU,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AAClJ,CAAC,CAAC,CAAA;AAEW,QAAA,mBAAmB,GAAG,IAAA,wBAAe,EAA4C,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3G,MAAM,MAAM,GAAQ,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC1G,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IAC5F,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,iBAAiB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IAC1G,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE,cAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACvL,OAAO,sBAAsB,IAAI,CAAC,IAAI,kBAAkB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAA;AACzE,CAAC,CAAC,CAAA;AAEW,QAAA,gBAAgB,GAAG,IAAA,wBAAe,EAAyC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrG,MAAM,MAAM,GAAQ,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;IACtH,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,cAAc,CAAC,CAAA;IAC1E,MAAM,UAAU,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,cAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC5G,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IAC5H,IAAI,GAAG,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,QAAQ,2BAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnI,MAAM,MAAM,CAAC,SAAS,CAAC,cAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5F,OAAO,aAAa,IAAI,CAAC,SAAS,2BAA2B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAA;AACrF,CAAC,CAAC,CAAA"}
@@ -5,7 +5,21 @@ export declare const logTime: (args: {
5
5
  description?: string | undefined;
6
6
  }) => Promise<{
7
7
  content: Array<{
8
- type: "text";
8
+ type: 'text';
9
+ text: string;
10
+ }>;
11
+ }>;
12
+ export declare const listTimeReports: (args: {
13
+ workspace?: string | undefined;
14
+ identifier?: string | undefined;
15
+ projectIdentifier?: string | undefined;
16
+ member?: string | undefined;
17
+ from?: string | undefined;
18
+ to?: string | undefined;
19
+ limit: number;
20
+ }) => Promise<{
21
+ content: Array<{
22
+ type: 'text';
9
23
  text: string;
10
24
  }>;
11
25
  }>;
@@ -3,21 +3,20 @@ 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.logTime = void 0;
6
+ exports.listTimeReports = exports.logTime = void 0;
7
7
  const tracker_1 = __importDefault(require("@hcengineering/tracker"));
8
- const contact_1 = __importDefault(require("@hcengineering/contact"));
8
+ const people_1 = require("../utils/people");
9
9
  const connection_1 = require("../connection");
10
10
  const errors_1 = require("../utils/errors");
11
+ const format_1 = require("../utils/format");
11
12
  const core_1 = require("@hcengineering/core");
12
13
  exports.logTime = (0, errors_1.wrapToolHandler)(async (args) => {
13
14
  const client = await (0, connection_1.getConnection)(args.workspace);
14
15
  const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
15
16
  if (issue == null)
16
17
  throw new Error(`Issue '${args.identifier}' not found.`);
17
- // Get current user
18
- const me = await client.findOne(contact_1.default.class.Member, {});
19
- if (me == null)
20
- throw new Error('Could not identify current user.');
18
+ // Time is booked on the person behind the connected account.
19
+ const me = await (0, people_1.currentPerson)(client);
21
20
  const now = new Date().getTime();
22
21
  const valueInHours = args.hours;
23
22
  await client.addCollection(tracker_1.default.class.TimeSpendReport, issue.space, issue._id, tracker_1.default.class.Issue, 'reports', {
@@ -28,4 +27,69 @@ exports.logTime = (0, errors_1.wrapToolHandler)(async (args) => {
28
27
  }, (0, core_1.generateId)());
29
28
  return `✅ Logged **${args.hours}h** on **${args.identifier}**${args.description ? ` — "${args.description}"` : ''}`;
30
29
  });
30
+ exports.listTimeReports = (0, errors_1.wrapToolHandler)(async (args) => {
31
+ if ((args.identifier == null) === (args.projectIdentifier == null)) {
32
+ throw new Error('Pass exactly one of identifier (issue) or projectIdentifier.');
33
+ }
34
+ const client = await (0, connection_1.getConnection)(args.workspace);
35
+ const query = {};
36
+ let scope;
37
+ if (args.identifier != null) {
38
+ const issue = await client.findOne(tracker_1.default.class.Issue, { identifier: args.identifier });
39
+ if (issue == null)
40
+ throw new Error(`Issue '${args.identifier}' not found.`);
41
+ query.attachedTo = issue._id;
42
+ scope = args.identifier;
43
+ }
44
+ else {
45
+ const project = await client.findOne(tracker_1.default.class.Project, { identifier: args.projectIdentifier });
46
+ if (project == null)
47
+ throw new Error(`Project '${args.projectIdentifier}' not found.`);
48
+ query.space = project._id;
49
+ scope = args.projectIdentifier;
50
+ }
51
+ const nameOf = await (0, people_1.peopleNames)(client);
52
+ if (args.member != null)
53
+ query.employee = (await (0, people_1.findPerson)(client, args.member))._id;
54
+ const parse = (v, end) => {
55
+ if (v == null)
56
+ return undefined;
57
+ const d = new Date(v);
58
+ if (isNaN(d.getTime()))
59
+ throw new Error(`Invalid date: '${v}'`);
60
+ // A bare date as upper bound includes that whole day.
61
+ return end && /^\d{4}-\d{2}-\d{2}$/.test(v) ? d.getTime() + 86_400_000 - 1 : d.getTime();
62
+ };
63
+ const from = parse(args.from, false);
64
+ const to = parse(args.to, true);
65
+ const all = await client.findAll(tracker_1.default.class.TimeSpendReport, query);
66
+ const reports = all
67
+ .filter((r) => (from == null || (r.date ?? 0) >= from) && (to == null || (r.date ?? 0) <= to))
68
+ .sort((a, b) => (b.date ?? 0) - (a.date ?? 0));
69
+ if (reports.length === 0)
70
+ return `No time reports found for ${scope}.`;
71
+ const issueIds = [...new Set(reports.map((r) => r.attachedTo))];
72
+ const issues = await client.findAll(tracker_1.default.class.Issue, { _id: { $in: issueIds } });
73
+ const issueId = new Map(issues.map((i) => [i._id, i.identifier]));
74
+ const totalHours = reports.reduce((sum, r) => sum + (r.value ?? 0), 0);
75
+ const byMember = new Map();
76
+ for (const r of reports) {
77
+ const who = r.employee != null ? nameOf.get(r.employee) ?? String(r.employee) : 'Unknown';
78
+ byMember.set(who, (byMember.get(who) ?? 0) + (r.value ?? 0));
79
+ }
80
+ const shown = reports.slice(0, args.limit);
81
+ const lines = shown.map((r) => {
82
+ const who = r.employee != null ? nameOf.get(r.employee) ?? String(r.employee) : 'Unknown';
83
+ const note = r.description !== '' ? ` — ${r.description}` : '';
84
+ return `- ${(0, format_1.formatDate)(r.date)} **${r.value}h** ${issueId.get(r.attachedTo) ?? ''} (${who})${note}`;
85
+ });
86
+ const perMember = [...byMember.entries()].map(([who, h]) => `${who}: ${Math.round(h * 100) / 100}h`).join(', ');
87
+ return [
88
+ `## Time reports for ${scope}`,
89
+ `**Total:** ${Math.round(totalHours * 100) / 100}h in ${reports.length} report(s) — ${perMember}`,
90
+ '',
91
+ ...lines,
92
+ reports.length > shown.length ? `\n_${reports.length - shown.length} more not shown (raise limit)._` : ''
93
+ ].filter((l, i, a) => !(l === '' && i === a.length - 1)).join('\n');
94
+ });
31
95
  //# sourceMappingURL=log-time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log-time.js","sourceRoot":"","sources":["../../src/tools/log-time.ts"],"names":[],"mappings":";;;;;;AAAA,qEAA4C;AAC5C,qEAA4C;AAC5C,8CAA6C;AAC7C,4CAAiD;AAIjD,8CAAgD;AAEnC,QAAA,OAAO,GAAG,IAAA,wBAAe,EAAgC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnF,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IACxF,IAAI,KAAK,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,cAAc,CAAC,CAAA;IAE3E,mBAAmB;IACnB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACzD,IAAI,EAAE,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IAEnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAA;IAE/B,MAAM,MAAM,CAAC,aAAa,CACxB,iBAAO,CAAC,KAAK,CAAC,eAAe,EAC7B,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,GAAG,EACT,iBAAO,CAAC,KAAK,CAAC,KAAK,EACnB,SAAS,EACT;QACE,QAAQ,EAAE,EAAE,CAAC,GAAqB;QAClC,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;KACpC,EACD,IAAA,iBAAU,GAAE,CACb,CAAA;IAED,OAAO,cAAc,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACrH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"log-time.js","sourceRoot":"","sources":["../../src/tools/log-time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const LOVE: {
2
+ readonly Room: 'love:class:Room';
3
+ readonly Office: 'love:class:Office';
4
+ readonly Minutes: 'love:class:MeetingMinutes';
5
+ readonly Message: 'chunter:class:ChatMessage';
6
+ readonly Collaborator: 'core:class:Collaborator';
7
+ };
8
+ export declare const listMeetings: (args: {
9
+ workspace?: string | undefined;
10
+ room?: string | undefined;
11
+ since?: string | undefined;
12
+ limit?: number | undefined;
13
+ includeOffices?: boolean | undefined;
14
+ }) => Promise<{
15
+ content: Array<{
16
+ type: 'text';
17
+ text: string;
18
+ }>;
19
+ }>;
20
+ export declare const getMeeting: (args: {
21
+ workspace?: string | undefined;
22
+ id: string;
23
+ transcript?: boolean | undefined;
24
+ limit?: number | undefined;
25
+ }) => Promise<{
26
+ content: Array<{
27
+ type: 'text';
28
+ text: string;
29
+ }>;
30
+ }>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMeeting = exports.listMeetings = exports.LOVE = void 0;
4
+ // Meetings (love plugin, read-only): office rooms, meeting minutes per room and their transcripts.
5
+ // Transcripts are chat messages in the minutes' 'transcription' collection, one per utterance.
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 content_1 = require("../utils/content");
11
+ const people_1 = require("../utils/people");
12
+ exports.LOVE = { Room: 'love:class:Room', Office: 'love:class:Office', Minutes: 'love:class:MeetingMinutes', Message: 'chunter:class:ChatMessage', Collaborator: 'core:class:Collaborator' };
13
+ const ROOM_TYPE = ['video', 'audio', 'reception'];
14
+ const ACCESS = ['open', 'knock', 'do not disturb'];
15
+ const when = (ts) => ts == null ? '?' : new Date(ts).toISOString().slice(0, 16).replace('T', ' ');
16
+ exports.listMeetings = (0, errors_1.wrapToolHandler)(async (args) => {
17
+ const client = await (0, connection_1.getConnection)(args.workspace);
18
+ const rooms = await client.findAll(exports.LOVE.Room, {});
19
+ const query = {};
20
+ if (args.room != null) {
21
+ const q = args.room.trim().toLowerCase();
22
+ const hits = rooms.filter((r) => r._id === args.room || String(r.name).toLowerCase() === q);
23
+ if (hits.length !== 1)
24
+ throw new Error(hits.length === 0 ? `Room '${args.room}' not found. Rooms: ${rooms.map((r) => r.name).join(', ')}.` : `Room '${args.room}' is ambiguous.`);
25
+ query.attachedTo = hits[0]._id;
26
+ }
27
+ if (args.since != null) {
28
+ const t = Date.parse(args.since);
29
+ if (Number.isNaN(t))
30
+ throw new Error(`since must be a date, got '${args.since}'.`);
31
+ query.createdOn = { $gte: t };
32
+ }
33
+ const minutes = await client.findAll(exports.LOVE.Minutes, query, { sort: { createdOn: core_1.SortingOrder.Descending }, limit: args.limit ?? 20 });
34
+ const roomLines = rooms.filter((r) => r._class !== exports.LOVE.Office || args.includeOffices === true)
35
+ .map((r) => `- ${String(r.name)} (${ROOM_TYPE[r.type] ?? r.type}, ${ACCESS[r.access] ?? r.access}${r.startWithTranscription === true ? ', transcribed' : ''}) · ${Number(r.meetings ?? 0)} meeting(s)`);
36
+ const out = [`## Rooms (${roomLines.length})`, ...roomLines, '', `## Meetings (${minutes.length})`];
37
+ if (minutes.length === 0)
38
+ out.push('No meeting minutes yet.');
39
+ for (const m of minutes) {
40
+ const room = rooms.find((r) => r._id === m.attachedTo);
41
+ const dur = m.meetingEnd != null ? ` – ${when(m.meetingEnd).slice(11)}` : m.status === 0 ? ' (running)' : '';
42
+ out.push(`- **${String(m.title)}** · ${String(room?.name ?? '?')} · ${when(m.createdOn)}${dur} · ${Number(m.transcription ?? 0)} transcript line(s), ${Number(m.todos ?? 0)} action item(s) — \`${String(m._id)}\``);
43
+ }
44
+ return out.join('\n');
45
+ });
46
+ exports.getMeeting = (0, errors_1.wrapToolHandler)(async (args) => {
47
+ const client = await (0, connection_1.getConnection)(args.workspace);
48
+ const m = await client.findOne(exports.LOVE.Minutes, { _id: args.id });
49
+ if (m == null)
50
+ throw new Error(`Meeting '${args.id}' not found (ids come from list_meetings).`);
51
+ const room = await client.findOne(exports.LOVE.Room, { _id: m.attachedTo });
52
+ const [collabs, todos, lines] = await Promise.all([
53
+ client.findAll(exports.LOVE.Collaborator, { attachedTo: m._id }),
54
+ client.findAll('time:class:ToDo', { attachedTo: m._id }),
55
+ args.transcript === false ? Promise.resolve([]) : client.findAll(exports.LOVE.Message, { attachedTo: m._id, collection: 'transcription' }, { sort: { createdOn: core_1.SortingOrder.Ascending }, limit: args.limit ?? 500 })
56
+ ]);
57
+ const persons = collabs.length > 0 ? await client.findAll('contact:class:Person', { personUuid: { $in: collabs.map((c) => c.collaborator) } }) : [];
58
+ const speakers = await (0, people_1.socialIdNames)(client, [...new Set(lines.map((l) => l.createdBy).filter((x) => x != null))]);
59
+ const notes = await (0, content_1.readMarkup)(args.workspace, m.description);
60
+ const out = [
61
+ `## ${String(m.title)}`,
62
+ `**Room:** ${String(room?.name ?? '?')} · **Start:** ${when(m.createdOn)} · **End:** ${m.meetingEnd != null ? when(m.meetingEnd) : m.status === 0 ? 'running' : '?'}`,
63
+ `**Participants:** ${persons.length > 0 ? persons.map((p) => String(p.name).split(',').reverse().join(' ').trim()).join(', ') : `${collabs.length}`}`
64
+ ];
65
+ if (notes.trim() !== '')
66
+ out.push('', '### Notes', notes.trim());
67
+ if (todos.length > 0)
68
+ out.push('', '### Action items', ...todos.map((t) => `- [${t.doneOn != null ? 'x' : ' '}] ${String(t.title)}`));
69
+ if (args.transcript !== false) {
70
+ out.push('', `### Transcript (${lines.length}${lines.length === (args.limit ?? 500) ? '+' : ''})`);
71
+ if (lines.length === 0)
72
+ out.push('_(none)_');
73
+ for (const l of lines)
74
+ out.push(`[${when(l.createdOn).slice(11)}] **${speakers.get(l.createdBy) ?? '?'}:** ${(0, format_1.markupToText)(l.message).trim()}`);
75
+ }
76
+ return out.join('\n');
77
+ });
78
+ //# sourceMappingURL=meetings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meetings.js","sourceRoot":"","sources":["../../src/tools/meetings.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ export declare const listMembers: (args: {
2
2
  workspace?: string | undefined;
3
3
  }) => Promise<{
4
4
  content: Array<{
5
- type: "text";
5
+ type: 'text';
6
6
  text: string;
7
7
  }>;
8
8
  }>;
@@ -1,16 +1,32 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.listMembers = void 0;
7
+ const contact_1 = __importDefault(require("@hcengineering/contact"));
4
8
  const connection_1 = require("../connection");
5
9
  const errors_1 = require("../utils/errors");
10
+ const people_1 = require("../utils/people");
6
11
  exports.listMembers = (0, errors_1.wrapToolHandler)(async (args) => {
7
12
  const accountClient = await (0, connection_1.getAccountClient)(args.workspace);
8
13
  const members = await accountClient.getWorkspaceMembers();
9
14
  if (members.length === 0)
10
15
  return 'No members found in this workspace.';
16
+ // Account members carry only a person UUID — resolve display names from the workspace.
17
+ let nameByUuid = new Map();
18
+ try {
19
+ const client = await (0, connection_1.getConnection)(args.workspace);
20
+ const persons = await client.findAll(contact_1.default.class.Person, {});
21
+ nameByUuid = new Map(persons.filter((p) => p.personUuid != null).map((p) => [String(p.personUuid), (0, people_1.formatPersonName)(p.name)]));
22
+ }
23
+ catch {
24
+ // Names are a convenience; the member list itself comes from the account service.
25
+ }
11
26
  const lines = members.map((m) => {
12
27
  const role = String(m.role ?? 'member');
13
- return `- \`${m.person}\` — role: **${role}**`;
28
+ const name = nameByUuid.get(String(m.person));
29
+ return `- ${name != null && name !== '' ? `**${name}** ` : ''}\`${m.person}\` — role: **${role}**`;
14
30
  });
15
31
  return `## Workspace Members (${members.length})\n\n${lines.join('\n')}`;
16
32
  });
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":";;;AAAA,8CAAgD;AAChD,4CAAiD;AAIpC,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qCAAqC,CAAA;IAEtE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;QACvC,OAAO,OAAO,CAAC,CAAC,MAAM,gBAAgB,IAAI,IAAI,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,OAAO,yBAAyB,OAAO,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":";;;;;;AAAA,qEAA4C;AAC5C,8CAA+D;AAC/D,4CAAiD;AACjD,4CAAkD;AAIrC,QAAA,WAAW,GAAG,IAAA,wBAAe,EAAoC,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3F,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,CAAA;IAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,qCAAqC,CAAA;IAEtE,uFAAuF;IACvF,IAAI,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,OAAO,GAAU,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACrE,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAA,yBAAgB,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAChI,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;IACpF,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAC7C,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,gBAAgB,IAAI,IAAI,CAAA;IACpG,CAAC,CAAC,CAAA;IAEF,OAAO,yBAAyB,OAAO,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAC1E,CAAC,CAAC,CAAA"}
@@ -0,0 +1,54 @@
1
+ export declare const MT: {
2
+ readonly Template: 'templates:class:MessageTemplate';
3
+ readonly Category: 'templates:class:TemplateCategory';
4
+ readonly Default: 'templates:space:Templates';
5
+ };
6
+ export declare const listMessageTemplates: (args: {
7
+ workspace?: string | undefined;
8
+ }) => Promise<{
9
+ content: Array<{
10
+ type: 'text';
11
+ text: string;
12
+ }>;
13
+ }>;
14
+ export declare const getMessageTemplate: (args: {
15
+ workspace?: string | undefined;
16
+ template: string;
17
+ }) => Promise<{
18
+ content: Array<{
19
+ type: 'text';
20
+ text: string;
21
+ }>;
22
+ }>;
23
+ export declare const createMessageTemplate: (args: {
24
+ workspace: string;
25
+ title: string;
26
+ message: string;
27
+ category?: string | undefined;
28
+ newCategory?: boolean | undefined;
29
+ }) => Promise<{
30
+ content: Array<{
31
+ type: 'text';
32
+ text: string;
33
+ }>;
34
+ }>;
35
+ export declare const updateMessageTemplate: (args: {
36
+ workspace: string;
37
+ template: string;
38
+ title?: string | undefined;
39
+ message?: string | undefined;
40
+ }) => Promise<{
41
+ content: Array<{
42
+ type: 'text';
43
+ text: string;
44
+ }>;
45
+ }>;
46
+ export declare const deleteMessageTemplate: (args: {
47
+ workspace: string;
48
+ template: string;
49
+ }) => Promise<{
50
+ content: Array<{
51
+ type: 'text';
52
+ text: string;
53
+ }>;
54
+ }>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteMessageTemplate = exports.updateMessageTemplate = exports.createMessageTemplate = exports.getMessageTemplate = exports.listMessageTemplates = exports.MT = void 0;
4
+ // Message templates (templates plugin): reusable chat/e-mail texts with ${field} placeholders,
5
+ // grouped in categories (spaces). The message is inline markup.
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 markdown_1 = require("../utils/markdown");
11
+ const markdownToMarkup = (md) => JSON.stringify((0, markdown_1.markdownToProseMirror)(md));
12
+ const people_1 = require("../utils/people");
13
+ const tasks_1 = require("../utils/tasks");
14
+ exports.MT = { Template: 'templates:class:MessageTemplate', Category: 'templates:class:TemplateCategory', Default: 'templates:space:Templates' };
15
+ async function findCategory(client, ref) {
16
+ if (ref == null) {
17
+ const def = await client.findOne(exports.MT.Category, { _id: exports.MT.Default });
18
+ if (def == null)
19
+ throw new Error('No default template category — pass category.');
20
+ return def;
21
+ }
22
+ return await (0, tasks_1.findNamed)(client, exports.MT.Category, ref, 'Template category');
23
+ }
24
+ async function findTemplate(client, ref) {
25
+ return await (0, tasks_1.findNamed)(client, exports.MT.Template, ref, 'Message template');
26
+ }
27
+ exports.listMessageTemplates = (0, errors_1.wrapToolHandler)(async (args) => {
28
+ const client = await (0, connection_1.getConnection)(args.workspace);
29
+ const cats = await client.findAll(exports.MT.Category, {});
30
+ const tpls = await client.findAll(exports.MT.Template, {});
31
+ if (tpls.length === 0)
32
+ return `No message templates. Categories: ${cats.map((c) => c.name).join(', ') || 'none'}.`;
33
+ const lines = [];
34
+ for (const c of cats) {
35
+ const mine = tpls.filter((t) => t.space === c._id);
36
+ if (mine.length === 0)
37
+ continue;
38
+ lines.push(`### ${String(c.name)}`);
39
+ for (const t of mine) {
40
+ const text = (0, format_1.markupToText)(t.message).replace(/\s+/g, ' ').trim();
41
+ lines.push(`- **${String(t.title)}** — ${text.slice(0, 100)}${text.length > 100 ? '…' : ''} — \`${String(t._id)}\``);
42
+ }
43
+ }
44
+ return `## Message templates (${tpls.length})\n\n${lines.join('\n')}`;
45
+ });
46
+ exports.getMessageTemplate = (0, errors_1.wrapToolHandler)(async (args) => {
47
+ const client = await (0, connection_1.getConnection)(args.workspace);
48
+ const t = await findTemplate(client, args.template);
49
+ const text = (0, format_1.markupToText)(t.message);
50
+ const fields = [...new Set([...text.matchAll(/\$\{(\S+?)\}/g)].map((m) => m[1]))];
51
+ return `## ${String(t.title)}\n\n${text}${fields.length > 0 ? `\n\n**Placeholders:** ${fields.join(', ')}` : ''}`;
52
+ });
53
+ exports.createMessageTemplate = (0, errors_1.wrapToolHandler)(async (args) => {
54
+ const client = await (0, connection_1.getConnection)(args.workspace);
55
+ let cat;
56
+ if (args.newCategory === true) {
57
+ if (args.category == null)
58
+ throw new Error('newCategory needs category (its name).');
59
+ const id = (0, core_1.generateId)();
60
+ await client.createDoc(exports.MT.Category, 'core:space:Space', { name: args.category.trim(), description: '', private: false, archived: false, members: [await (0, people_1.currentAccountUuid)(client)] }, id);
61
+ cat = { _id: id, name: args.category.trim() };
62
+ }
63
+ else
64
+ cat = await findCategory(client, args.category);
65
+ const id = (0, core_1.generateId)();
66
+ await client.createDoc(exports.MT.Template, cat._id, { title: args.title.trim(), message: markdownToMarkup(args.message) }, id);
67
+ return `✅ Template **${args.title}** in ${String(cat.name)} — \`${id}\``;
68
+ });
69
+ exports.updateMessageTemplate = (0, errors_1.wrapToolHandler)(async (args) => {
70
+ const client = await (0, connection_1.getConnection)(args.workspace);
71
+ const t = await findTemplate(client, args.template);
72
+ const update = {};
73
+ if (args.title != null)
74
+ update.title = args.title.trim();
75
+ if (args.message != null)
76
+ update.message = markdownToMarkup(args.message);
77
+ if (Object.keys(update).length === 0)
78
+ throw new Error('Nothing to change.');
79
+ await client.updateDoc(exports.MT.Template, t.space, t._id, update);
80
+ return `✅ Template **${String(update.title ?? t.title)}** updated: ${Object.keys(update).join(', ')}.`;
81
+ });
82
+ exports.deleteMessageTemplate = (0, errors_1.wrapToolHandler)(async (args) => {
83
+ const client = await (0, connection_1.getConnection)(args.workspace);
84
+ const t = await findTemplate(client, args.template);
85
+ await client.removeDoc(exports.MT.Template, t.space, t._id);
86
+ return `🗑️ Template **${String(t.title)}** deleted.`;
87
+ });
88
+ //# sourceMappingURL=message-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-templates.js","sourceRoot":"","sources":["../../src/tools/message-templates.ts"],"names":[],"mappings":"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"}