@decaf-ts/mcp-server 0.0.3 → 0.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 (214) hide show
  1. package/README.md +18 -2
  2. package/dist/mcp-server.cjs +1989 -341
  3. package/dist/mcp-server.esm.cjs +1963 -338
  4. package/lib/McpWrapper.cjs +12 -10
  5. package/lib/McpWrapper.d.ts +1 -1
  6. package/lib/bin/validate-modules.cjs +24 -0
  7. package/lib/bin/validate-modules.d.ts +2 -0
  8. package/lib/constants.cjs +22 -2
  9. package/lib/constants.d.ts +16 -0
  10. package/lib/esm/McpWrapper.d.ts +1 -1
  11. package/lib/esm/McpWrapper.js +12 -10
  12. package/lib/esm/bin/validate-modules.d.ts +2 -0
  13. package/lib/esm/bin/validate-modules.js +22 -0
  14. package/lib/esm/constants.d.ts +16 -0
  15. package/lib/esm/constants.js +21 -1
  16. package/lib/esm/mcp/aggregateModules.d.ts +26 -0
  17. package/lib/esm/mcp/aggregateModules.js +185 -0
  18. package/lib/esm/mcp/code.d.ts +23 -0
  19. package/lib/esm/mcp/code.js +70 -0
  20. package/lib/esm/mcp/decorator-tools.js +237 -0
  21. package/lib/esm/mcp/fastmcp-wiring.d.ts +14 -0
  22. package/lib/esm/mcp/fastmcp-wiring.js +56 -0
  23. package/lib/esm/mcp/index.d.ts +7 -1
  24. package/lib/esm/mcp/index.js +26 -2
  25. package/lib/esm/mcp/mcp-module.d.ts +11 -0
  26. package/lib/esm/mcp/mcp-module.js +31 -0
  27. package/lib/esm/mcp/moduleRegistry.d.ts +12 -0
  28. package/lib/esm/mcp/moduleRegistry.js +46 -0
  29. package/lib/esm/mcp/prompts/index.d.ts +4 -0
  30. package/lib/esm/mcp/prompts/index.js +7 -0
  31. package/lib/esm/mcp/prompts/prompts.d.ts +22 -0
  32. package/lib/esm/mcp/prompts/prompts.js +197 -0
  33. package/lib/esm/mcp/resources/index.d.ts +1 -0
  34. package/lib/esm/mcp/resources/index.js +2 -0
  35. package/lib/esm/mcp/resources/resources.d.ts +2 -0
  36. package/lib/esm/mcp/resources/resources.js +69 -0
  37. package/lib/esm/mcp/schemas.d.ts +53 -0
  38. package/lib/esm/mcp/schemas.js +97 -0
  39. package/lib/esm/mcp/templates/codex-templates.d.ts +3 -0
  40. package/lib/esm/mcp/templates/codex-templates.js +33 -0
  41. package/lib/esm/mcp/templates/index.d.ts +71 -0
  42. package/lib/esm/mcp/templates/index.js +66 -0
  43. package/lib/esm/mcp/templates/resource-templates.d.ts +3 -0
  44. package/lib/esm/mcp/templates/resource-templates.js +60 -0
  45. package/lib/esm/mcp/templates/workspace-templates.d.ts +3 -0
  46. package/lib/esm/mcp/templates/workspace-templates.js +66 -0
  47. package/lib/esm/mcp/tools/codex-tools.d.ts +5 -0
  48. package/lib/esm/mcp/tools/codex-tools.js +244 -0
  49. package/lib/esm/mcp/tools/generateMcpModule.d.ts +9 -0
  50. package/lib/esm/mcp/tools/generateMcpModule.js +133 -0
  51. package/lib/esm/mcp/tools/index.d.ts +321 -0
  52. package/lib/esm/mcp/tools/index.js +29 -0
  53. package/lib/esm/mcp/tools/tools.d.ts +10 -0
  54. package/lib/esm/mcp/tools/tools.js +273 -0
  55. package/lib/esm/mcp/types.d.ts +66 -0
  56. package/lib/esm/mcp/types.js +2 -0
  57. package/lib/esm/mcp/utils.d.ts +4 -0
  58. package/lib/esm/mcp/utils.js +46 -0
  59. package/lib/esm/mcp/validation/index.d.ts +13 -0
  60. package/lib/esm/mcp/validation/index.js +116 -0
  61. package/lib/esm/mcp/validation/scaffoldModule.d.ts +9 -0
  62. package/lib/esm/mcp/validation/scaffoldModule.js +88 -0
  63. package/lib/esm/mcp/workspace.d.ts +9 -0
  64. package/lib/esm/mcp/workspace.js +73 -0
  65. package/lib/esm/metadata.d.ts +1 -1
  66. package/lib/esm/metadata.js +1 -1
  67. package/lib/esm/modules/_template/index.d.ts +32 -0
  68. package/lib/esm/modules/_template/index.js +16 -0
  69. package/lib/esm/modules/_template/prompts/index.d.ts +6 -0
  70. package/lib/esm/modules/_template/prompts/index.js +9 -0
  71. package/lib/esm/modules/_template/resources/index.d.ts +6 -0
  72. package/lib/esm/modules/_template/resources/index.js +9 -0
  73. package/lib/esm/modules/_template/templates/index.d.ts +7 -0
  74. package/lib/esm/modules/_template/templates/index.js +10 -0
  75. package/lib/esm/modules/_template/tools/index.d.ts +6 -0
  76. package/lib/esm/modules/_template/tools/index.js +15 -0
  77. package/lib/esm/modules/decoration/index.d.ts +46 -0
  78. package/lib/esm/modules/decoration/index.js +10 -2
  79. package/lib/esm/modules/decoration/prompts/index.d.ts +1 -0
  80. package/lib/esm/modules/decoration/prompts/index.js +2 -0
  81. package/lib/esm/modules/decoration/resources/index.d.ts +7 -0
  82. package/lib/esm/modules/decoration/resources/index.js +10 -0
  83. package/lib/esm/modules/decoration/templates/index.d.ts +6 -0
  84. package/lib/esm/modules/decoration/templates/index.js +9 -0
  85. package/lib/esm/modules/decoration/tools/index.d.ts +26 -0
  86. package/lib/esm/modules/decoration/tools/index.js +7 -0
  87. package/lib/esm/modules/index.d.ts +2 -0
  88. package/lib/esm/modules/index.js +10 -0
  89. package/lib/esm/modules/mcp/decoration-assist.d.ts +4 -0
  90. package/lib/esm/modules/mcp/decoration-assist.js +6 -0
  91. package/lib/esm/modules/mcp/index.d.ts +6 -2
  92. package/lib/esm/modules/mcp/index.js +16 -3
  93. package/lib/esm/modules/mcp/prompts/index.d.ts +2 -0
  94. package/lib/esm/modules/mcp/prompts/index.js +9 -0
  95. package/lib/esm/modules/mcp/resources/index.d.ts +2 -0
  96. package/lib/esm/modules/mcp/resources/index.js +24 -0
  97. package/lib/esm/modules/mcp/templates/index.d.ts +2 -0
  98. package/lib/esm/modules/mcp/templates/index.js +28 -0
  99. package/lib/esm/modules/mcp/tools/index.d.ts +6 -0
  100. package/lib/esm/modules/mcp/tools/index.js +15 -0
  101. package/lib/esm/types.d.ts +41 -1
  102. package/lib/esm/types.js +1 -1
  103. package/lib/esm/utils/modulePaths.d.ts +6 -0
  104. package/lib/esm/utils/modulePaths.js +33 -0
  105. package/lib/esm/utils/moduleValidator.d.ts +14 -0
  106. package/lib/esm/utils/moduleValidator.js +176 -0
  107. package/lib/esm/utils.d.ts +1 -0
  108. package/lib/esm/utils.js +2 -1
  109. package/lib/mcp/aggregateModules.cjs +225 -0
  110. package/lib/mcp/aggregateModules.d.ts +26 -0
  111. package/lib/mcp/code.cjs +81 -0
  112. package/lib/mcp/code.d.ts +23 -0
  113. package/lib/mcp/decorator-tools.cjs +243 -0
  114. package/lib/mcp/fastmcp-wiring.cjs +59 -0
  115. package/lib/mcp/fastmcp-wiring.d.ts +14 -0
  116. package/lib/mcp/index.cjs +47 -12
  117. package/lib/mcp/index.d.ts +7 -1
  118. package/lib/mcp/mcp-module.cjs +53 -0
  119. package/lib/mcp/mcp-module.d.ts +11 -0
  120. package/lib/mcp/moduleRegistry.cjs +50 -0
  121. package/lib/mcp/moduleRegistry.d.ts +12 -0
  122. package/lib/mcp/prompts/index.cjs +25 -0
  123. package/lib/mcp/prompts/index.d.ts +4 -0
  124. package/lib/mcp/prompts/prompts.cjs +211 -0
  125. package/lib/mcp/prompts/prompts.d.ts +22 -0
  126. package/lib/mcp/resources/index.cjs +18 -0
  127. package/lib/mcp/resources/index.d.ts +1 -0
  128. package/lib/mcp/resources/resources.cjs +72 -0
  129. package/lib/mcp/resources/resources.d.ts +2 -0
  130. package/lib/mcp/schemas.cjs +100 -0
  131. package/lib/mcp/schemas.d.ts +53 -0
  132. package/lib/mcp/templates/codex-templates.cjs +40 -0
  133. package/lib/mcp/templates/codex-templates.d.ts +3 -0
  134. package/lib/mcp/templates/index.cjs +76 -0
  135. package/lib/mcp/templates/index.d.ts +71 -0
  136. package/lib/mcp/templates/resource-templates.cjs +67 -0
  137. package/lib/mcp/templates/resource-templates.d.ts +3 -0
  138. package/lib/mcp/templates/workspace-templates.cjs +70 -0
  139. package/lib/mcp/templates/workspace-templates.d.ts +3 -0
  140. package/lib/mcp/tools/codex-tools.cjs +250 -0
  141. package/lib/mcp/tools/codex-tools.d.ts +5 -0
  142. package/lib/mcp/tools/generateMcpModule.cjs +139 -0
  143. package/lib/mcp/tools/generateMcpModule.d.ts +9 -0
  144. package/lib/mcp/tools/index.cjs +46 -0
  145. package/lib/mcp/tools/index.d.ts +321 -0
  146. package/lib/mcp/tools/tools.cjs +282 -0
  147. package/lib/mcp/tools/tools.d.ts +10 -0
  148. package/lib/mcp/types.cjs +3 -0
  149. package/lib/mcp/types.d.ts +66 -0
  150. package/lib/mcp/utils.cjs +54 -0
  151. package/lib/mcp/utils.d.ts +4 -0
  152. package/lib/mcp/validation/index.cjs +123 -0
  153. package/lib/mcp/validation/index.d.ts +13 -0
  154. package/lib/mcp/validation/scaffoldModule.cjs +94 -0
  155. package/lib/mcp/validation/scaffoldModule.d.ts +9 -0
  156. package/lib/mcp/workspace.cjs +119 -0
  157. package/lib/mcp/workspace.d.ts +9 -0
  158. package/lib/metadata.cjs +1 -1
  159. package/lib/metadata.d.ts +1 -1
  160. package/lib/modules/_template/index.cjs +23 -0
  161. package/lib/modules/_template/index.d.ts +32 -0
  162. package/lib/modules/_template/prompts/index.cjs +12 -0
  163. package/lib/modules/_template/prompts/index.d.ts +6 -0
  164. package/lib/modules/_template/resources/index.cjs +12 -0
  165. package/lib/modules/_template/resources/index.d.ts +6 -0
  166. package/lib/modules/_template/templates/index.cjs +13 -0
  167. package/lib/modules/_template/templates/index.d.ts +7 -0
  168. package/lib/modules/_template/tools/index.cjs +18 -0
  169. package/lib/modules/_template/tools/index.d.ts +6 -0
  170. package/lib/modules/decoration/index.cjs +16 -1
  171. package/lib/modules/decoration/index.d.ts +46 -0
  172. package/lib/modules/decoration/prompts/index.cjs +5 -0
  173. package/lib/modules/decoration/prompts/index.d.ts +1 -0
  174. package/lib/modules/decoration/resources/index.cjs +13 -0
  175. package/lib/modules/decoration/resources/index.d.ts +7 -0
  176. package/lib/modules/decoration/templates/index.cjs +12 -0
  177. package/lib/modules/decoration/templates/index.d.ts +6 -0
  178. package/lib/modules/decoration/tools/index.cjs +10 -0
  179. package/lib/modules/decoration/tools/index.d.ts +26 -0
  180. package/lib/modules/index.cjs +13 -0
  181. package/lib/modules/index.d.ts +2 -0
  182. package/lib/modules/mcp/decoration-assist.cjs +13 -0
  183. package/lib/modules/mcp/decoration-assist.d.ts +4 -0
  184. package/lib/modules/mcp/index.cjs +21 -22
  185. package/lib/modules/mcp/index.d.ts +6 -2
  186. package/lib/modules/mcp/prompts/index.cjs +12 -0
  187. package/lib/modules/mcp/prompts/index.d.ts +2 -0
  188. package/lib/modules/mcp/resources/index.cjs +27 -0
  189. package/lib/modules/mcp/resources/index.d.ts +2 -0
  190. package/lib/modules/mcp/templates/index.cjs +31 -0
  191. package/lib/modules/mcp/templates/index.d.ts +2 -0
  192. package/lib/modules/mcp/tools/index.cjs +18 -0
  193. package/lib/modules/mcp/tools/index.d.ts +6 -0
  194. package/lib/types.cjs +1 -1
  195. package/lib/types.d.ts +41 -1
  196. package/lib/utils/modulePaths.cjs +43 -0
  197. package/lib/utils/modulePaths.d.ts +6 -0
  198. package/lib/utils/moduleValidator.cjs +184 -0
  199. package/lib/utils/moduleValidator.d.ts +14 -0
  200. package/lib/utils.cjs +5 -1
  201. package/lib/utils.d.ts +1 -0
  202. package/package.json +18 -12
  203. package/lib/esm/modules/decoration-assist/index.d.ts +0 -39
  204. package/lib/esm/modules/decoration-assist/index.js +0 -353
  205. package/lib/esm/modules/mcp/decorator-tools.js +0 -237
  206. package/lib/esm/modules/mcp/mcp-module.d.ts +0 -230
  207. package/lib/esm/modules/mcp/mcp-module.js +0 -406
  208. package/lib/modules/decoration-assist/index.cjs +0 -360
  209. package/lib/modules/decoration-assist/index.d.ts +0 -39
  210. package/lib/modules/mcp/decorator-tools.cjs +0 -243
  211. package/lib/modules/mcp/mcp-module.cjs +0 -452
  212. package/lib/modules/mcp/mcp-module.d.ts +0 -230
  213. /package/lib/esm/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
  214. /package/lib/{modules/mcp → mcp}/decorator-tools.d.ts +0 -0
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.templateList = exports.workspaceResourceTemplates = exports.buildWorkspaceResourceTemplates = exports.decorationResourceTemplates = exports.buildDecorationResourceTemplates = exports.codexPromptTemplates = exports.buildCodexPromptTemplates = void 0;
4
+ exports.buildResourceTemplates = buildResourceTemplates;
5
+ const codex_templates_1 = require("./codex-templates.cjs");
6
+ const resource_templates_1 = require("./resource-templates.cjs");
7
+ const workspace_templates_1 = require("./workspace-templates.cjs");
8
+ const moduleRegistry_1 = require("./../moduleRegistry.cjs");
9
+ var codex_templates_2 = require("./codex-templates.cjs");
10
+ Object.defineProperty(exports, "buildCodexPromptTemplates", { enumerable: true, get: function () { return codex_templates_2.buildCodexPromptTemplates; } });
11
+ Object.defineProperty(exports, "codexPromptTemplates", { enumerable: true, get: function () { return codex_templates_2.codexPromptTemplates; } });
12
+ var resource_templates_2 = require("./resource-templates.cjs");
13
+ Object.defineProperty(exports, "buildDecorationResourceTemplates", { enumerable: true, get: function () { return resource_templates_2.buildDecorationResourceTemplates; } });
14
+ Object.defineProperty(exports, "decorationResourceTemplates", { enumerable: true, get: function () { return resource_templates_2.decorationResourceTemplates; } });
15
+ var workspace_templates_2 = require("./workspace-templates.cjs");
16
+ Object.defineProperty(exports, "buildWorkspaceResourceTemplates", { enumerable: true, get: function () { return workspace_templates_2.buildWorkspaceResourceTemplates; } });
17
+ Object.defineProperty(exports, "workspaceResourceTemplates", { enumerable: true, get: function () { return workspace_templates_2.workspaceResourceTemplates; } });
18
+ function buildResourceTemplates() {
19
+ const moduleTemplates = moduleRegistry_1.moduleRegistry.listTemplates().map((template) => ({
20
+ name: template.id,
21
+ description: template.description ?? template.title,
22
+ mimeType: "text/markdown",
23
+ uriTemplate: `module-template://${template.id}`,
24
+ arguments: (template.placeholders ?? []).map((name) => ({
25
+ name,
26
+ description: `Value for ${name}`,
27
+ required: true,
28
+ })),
29
+ load: async () => ({
30
+ text: typeof template.content === "string"
31
+ ? template.content
32
+ : `# ${template.description ?? template.title ?? template.id}\n\nNo template content available for ${template.id}`,
33
+ }),
34
+ }));
35
+ const all = [
36
+ ...(0, workspace_templates_1.buildWorkspaceResourceTemplates)(),
37
+ ...(0, codex_templates_1.buildCodexPromptTemplates)(),
38
+ ...(0, resource_templates_1.buildDecorationResourceTemplates)(),
39
+ ...moduleTemplates,
40
+ ];
41
+ // Normalise all loaders to always return { text: string }
42
+ function normaliseResult(res) {
43
+ if (res == null)
44
+ return { text: "" };
45
+ if (typeof res === "string")
46
+ return { text: res };
47
+ if (typeof res.text === "string")
48
+ return res;
49
+ // handle legacy ContentResult shapes with content or content array
50
+ if (Array.isArray(res.content)) {
51
+ const parts = res.content
52
+ .map((c) => (c && typeof c.text === "string" ? c.text : String(c)))
53
+ .join("\n");
54
+ return { text: parts };
55
+ }
56
+ if (res.content && typeof res.content.text === "string") {
57
+ return { text: res.content.text };
58
+ }
59
+ // fallback: stringify
60
+ try {
61
+ return { text: JSON.stringify(res) };
62
+ }
63
+ catch {
64
+ return { text: String(res) };
65
+ }
66
+ }
67
+ return all.map((t) => ({
68
+ ...t,
69
+ load: async (args) => {
70
+ const raw = await t.load(args);
71
+ return normaliseResult(raw);
72
+ },
73
+ }));
74
+ }
75
+ exports.templateList = buildResourceTemplates();
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3RlbXBsYXRlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0QkEsd0RBd0RDO0FBcEZELDJEQUcyQjtBQUMzQixpRUFHOEI7QUFDOUIsbUVBRytCO0FBRS9CLDREQUFtRDtBQUVuRCx5REFHMkI7QUFGekIsNEhBQUEseUJBQXlCLE9BQUE7QUFDekIsdUhBQUEsb0JBQW9CLE9BQUE7QUFFdEIsK0RBRzhCO0FBRjVCLHNJQUFBLGdDQUFnQyxPQUFBO0FBQ2hDLGlJQUFBLDJCQUEyQixPQUFBO0FBRTdCLGlFQUcrQjtBQUY3QixzSUFBQSwrQkFBK0IsT0FBQTtBQUMvQixpSUFBQSwwQkFBMEIsT0FBQTtBQUc1QixTQUFnQixzQkFBc0I7SUFDcEMsTUFBTSxlQUFlLEdBQUcsK0JBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ2pCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxLQUFLO1FBQ25ELFFBQVEsRUFBRSxlQUFlO1FBQ3pCLFdBQVcsRUFBRSxxQkFBcUIsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJO1lBQ0osV0FBVyxFQUFFLGFBQWEsSUFBSSxFQUFFO1lBQ2hDLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqQixJQUFJLEVBQ0YsT0FBUSxRQUFnQixDQUFDLE9BQU8sS0FBSyxRQUFRO2dCQUMzQyxDQUFDLENBQUUsUUFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEVBQUUseUNBQXlDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7U0FDdkgsQ0FBQztLQUNILENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxHQUFHLEdBQUc7UUFDVixHQUFHLElBQUEscURBQStCLEdBQUU7UUFDcEMsR0FBRyxJQUFBLDJDQUF5QixHQUFFO1FBQzlCLEdBQUcsSUFBQSxxREFBZ0MsR0FBRTtRQUNyQyxHQUFHLGVBQWU7S0FDbkIsQ0FBQztJQUVGLDBEQUEwRDtJQUMxRCxTQUFTLGVBQWUsQ0FBQyxHQUFRO1FBQy9CLElBQUksR0FBRyxJQUFJLElBQUk7WUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQzdDLG1FQUFtRTtRQUNuRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU87aUJBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQ0Qsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQztZQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQztRQUNKLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxHQUFHLEdBQUcsTUFBTyxDQUFDLENBQUMsSUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLENBQUM7S0FDRixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFWSxRQUFBLFlBQVksR0FBRyxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYnVpbGRDb2RleFByb21wdFRlbXBsYXRlcyxcbiAgY29kZXhQcm9tcHRUZW1wbGF0ZXMsXG59IGZyb20gXCIuL2NvZGV4LXRlbXBsYXRlc1wiO1xuaW1wb3J0IHtcbiAgYnVpbGREZWNvcmF0aW9uUmVzb3VyY2VUZW1wbGF0ZXMsXG4gIGRlY29yYXRpb25SZXNvdXJjZVRlbXBsYXRlcyxcbn0gZnJvbSBcIi4vcmVzb3VyY2UtdGVtcGxhdGVzXCI7XG5pbXBvcnQge1xuICBidWlsZFdvcmtzcGFjZVJlc291cmNlVGVtcGxhdGVzLFxuICB3b3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlcyxcbn0gZnJvbSBcIi4vd29ya3NwYWNlLXRlbXBsYXRlc1wiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZUFzc2V0IH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBtb2R1bGVSZWdpc3RyeSB9IGZyb20gXCIuLi9tb2R1bGVSZWdpc3RyeVwiO1xuXG5leHBvcnQge1xuICBidWlsZENvZGV4UHJvbXB0VGVtcGxhdGVzLFxuICBjb2RleFByb21wdFRlbXBsYXRlcyxcbn0gZnJvbSBcIi4vY29kZXgtdGVtcGxhdGVzXCI7XG5leHBvcnQge1xuICBidWlsZERlY29yYXRpb25SZXNvdXJjZVRlbXBsYXRlcyxcbiAgZGVjb3JhdGlvblJlc291cmNlVGVtcGxhdGVzLFxufSBmcm9tIFwiLi9yZXNvdXJjZS10ZW1wbGF0ZXNcIjtcbmV4cG9ydCB7XG4gIGJ1aWxkV29ya3NwYWNlUmVzb3VyY2VUZW1wbGF0ZXMsXG4gIHdvcmtzcGFjZVJlc291cmNlVGVtcGxhdGVzLFxufSBmcm9tIFwiLi93b3Jrc3BhY2UtdGVtcGxhdGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlc291cmNlVGVtcGxhdGVzKCkge1xuICBjb25zdCBtb2R1bGVUZW1wbGF0ZXMgPSBtb2R1bGVSZWdpc3RyeS5saXN0VGVtcGxhdGVzKCkubWFwKCh0ZW1wbGF0ZSkgPT4gKHtcbiAgICBuYW1lOiB0ZW1wbGF0ZS5pZCxcbiAgICBkZXNjcmlwdGlvbjogdGVtcGxhdGUuZGVzY3JpcHRpb24gPz8gdGVtcGxhdGUudGl0bGUsXG4gICAgbWltZVR5cGU6IFwidGV4dC9tYXJrZG93blwiLFxuICAgIHVyaVRlbXBsYXRlOiBgbW9kdWxlLXRlbXBsYXRlOi8vJHt0ZW1wbGF0ZS5pZH1gLFxuICAgIGFyZ3VtZW50czogKHRlbXBsYXRlLnBsYWNlaG9sZGVycyA/PyBbXSkubWFwKChuYW1lKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVmFsdWUgZm9yICR7bmFtZX1gLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSkpLFxuICAgIGxvYWQ6IGFzeW5jICgpID0+ICh7XG4gICAgICB0ZXh0OlxuICAgICAgICB0eXBlb2YgKHRlbXBsYXRlIGFzIGFueSkuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gKHRlbXBsYXRlIGFzIGFueSkuY29udGVudFxuICAgICAgICAgIDogYCMgJHt0ZW1wbGF0ZS5kZXNjcmlwdGlvbiA/PyB0ZW1wbGF0ZS50aXRsZSA/PyB0ZW1wbGF0ZS5pZH1cXG5cXG5ObyB0ZW1wbGF0ZSBjb250ZW50IGF2YWlsYWJsZSBmb3IgJHt0ZW1wbGF0ZS5pZH1gLFxuICAgIH0pLFxuICB9KSk7XG5cbiAgY29uc3QgYWxsID0gW1xuICAgIC4uLmJ1aWxkV29ya3NwYWNlUmVzb3VyY2VUZW1wbGF0ZXMoKSxcbiAgICAuLi5idWlsZENvZGV4UHJvbXB0VGVtcGxhdGVzKCksXG4gICAgLi4uYnVpbGREZWNvcmF0aW9uUmVzb3VyY2VUZW1wbGF0ZXMoKSxcbiAgICAuLi5tb2R1bGVUZW1wbGF0ZXMsXG4gIF07XG5cbiAgLy8gTm9ybWFsaXNlIGFsbCBsb2FkZXJzIHRvIGFsd2F5cyByZXR1cm4geyB0ZXh0OiBzdHJpbmcgfVxuICBmdW5jdGlvbiBub3JtYWxpc2VSZXN1bHQocmVzOiBhbnkpIHtcbiAgICBpZiAocmVzID09IG51bGwpIHJldHVybiB7IHRleHQ6IFwiXCIgfTtcbiAgICBpZiAodHlwZW9mIHJlcyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHsgdGV4dDogcmVzIH07XG4gICAgaWYgKHR5cGVvZiByZXMudGV4dCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHJlcztcbiAgICAvLyBoYW5kbGUgbGVnYWN5IENvbnRlbnRSZXN1bHQgc2hhcGVzIHdpdGggY29udGVudCBvciBjb250ZW50IGFycmF5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzLmNvbnRlbnQpKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHJlcy5jb250ZW50XG4gICAgICAgIC5tYXAoKGM6IGFueSkgPT4gKGMgJiYgdHlwZW9mIGMudGV4dCA9PT0gXCJzdHJpbmdcIiA/IGMudGV4dCA6IFN0cmluZyhjKSkpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgICAgcmV0dXJuIHsgdGV4dDogcGFydHMgfTtcbiAgICB9XG4gICAgaWYgKHJlcy5jb250ZW50ICYmIHR5cGVvZiByZXMuY29udGVudC50ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geyB0ZXh0OiByZXMuY29udGVudC50ZXh0IH07XG4gICAgfVxuICAgIC8vIGZhbGxiYWNrOiBzdHJpbmdpZnlcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzKSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHJlcykgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWxsLm1hcCgodCkgPT4gKHtcbiAgICAuLi50LFxuICAgIGxvYWQ6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0ICh0LmxvYWQgYXMgYW55KShhcmdzKTtcbiAgICAgIHJldHVybiBub3JtYWxpc2VSZXN1bHQocmF3KTtcbiAgICB9LFxuICB9KSk7XG59XG5cbmV4cG9ydCBjb25zdCB0ZW1wbGF0ZUxpc3QgPSBidWlsZFJlc291cmNlVGVtcGxhdGVzKCk7XG4iXX0=
@@ -0,0 +1,71 @@
1
+ export { buildCodexPromptTemplates, codexPromptTemplates, } from "./codex-templates";
2
+ export { buildDecorationResourceTemplates, decorationResourceTemplates, } from "./resource-templates";
3
+ export { buildWorkspaceResourceTemplates, workspaceResourceTemplates, } from "./workspace-templates";
4
+ export declare function buildResourceTemplates(): ({
5
+ load: (args: any) => Promise<any>;
6
+ name: string;
7
+ description: string;
8
+ uriTemplate: string;
9
+ mimeType: string;
10
+ arguments: ReadonlyArray<{
11
+ name: string;
12
+ description: string;
13
+ required: boolean;
14
+ }>;
15
+ } | {
16
+ load: (args: any) => Promise<any>;
17
+ name: string;
18
+ description: string;
19
+ uriTemplate: string;
20
+ mimeType: string;
21
+ arguments: ReadonlyArray<{
22
+ name: string;
23
+ description: string;
24
+ required: boolean;
25
+ }>;
26
+ } | {
27
+ load: (args: any) => Promise<any>;
28
+ name: string;
29
+ description: string;
30
+ mimeType: string;
31
+ uriTemplate: string;
32
+ arguments: {
33
+ name: string;
34
+ description: string;
35
+ required: boolean;
36
+ }[];
37
+ })[];
38
+ export declare const templateList: ({
39
+ load: (args: any) => Promise<any>;
40
+ name: string;
41
+ description: string;
42
+ uriTemplate: string;
43
+ mimeType: string;
44
+ arguments: ReadonlyArray<{
45
+ name: string;
46
+ description: string;
47
+ required: boolean;
48
+ }>;
49
+ } | {
50
+ load: (args: any) => Promise<any>;
51
+ name: string;
52
+ description: string;
53
+ uriTemplate: string;
54
+ mimeType: string;
55
+ arguments: ReadonlyArray<{
56
+ name: string;
57
+ description: string;
58
+ required: boolean;
59
+ }>;
60
+ } | {
61
+ load: (args: any) => Promise<any>;
62
+ name: string;
63
+ description: string;
64
+ mimeType: string;
65
+ uriTemplate: string;
66
+ arguments: {
67
+ name: string;
68
+ description: string;
69
+ required: boolean;
70
+ }[];
71
+ })[];
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decorationResourceTemplates = void 0;
7
+ exports.buildDecorationResourceTemplates = buildDecorationResourceTemplates;
8
+ const path_1 = __importDefault(require("path"));
9
+ const workspace_1 = require("./../workspace.cjs");
10
+ exports.decorationResourceTemplates = [];
11
+ function makeLoader(type) {
12
+ return async ({ path: relative }) => {
13
+ const root = (0, workspace_1.getWorkspaceRoot)();
14
+ const target = path_1.default.join(type, relative);
15
+ const text = await (0, workspace_1.readWorkspaceFile)(root, target);
16
+ return { text };
17
+ };
18
+ }
19
+ function buildDecorationResourceTemplates() {
20
+ const templates = [
21
+ {
22
+ name: "read-code-from-source",
23
+ description: "Read a file from the <base_path>/src tree by relative path.",
24
+ mimeType: "text/plain",
25
+ uriTemplate: "from-source://src/{path}",
26
+ arguments: [
27
+ {
28
+ name: "path",
29
+ description: "Path under <base_path>/src to load, e.g. 'decoration/types.ts'",
30
+ required: true,
31
+ },
32
+ ],
33
+ load: makeLoader("src"),
34
+ },
35
+ {
36
+ name: "read-test-from-source",
37
+ description: "Read a file from the <base_path>/tests tree by relative path.",
38
+ mimeType: "text/plain",
39
+ uriTemplate: "from-source://tests/{path}",
40
+ arguments: [
41
+ {
42
+ name: "path",
43
+ description: "Path under <base_path>/tests to load, e.g. 'decoration/tests/types.test.ts'",
44
+ required: true,
45
+ },
46
+ ],
47
+ load: makeLoader("tests"),
48
+ },
49
+ {
50
+ name: "read-doc-from-source",
51
+ description: "Read a file from the <base_path>/workdocs tree by relative path.",
52
+ mimeType: "text/plain",
53
+ uriTemplate: "from-source://workdocs/{path}",
54
+ arguments: [
55
+ {
56
+ name: "path",
57
+ description: "Path under <base_path>/workdocs to load, e.g. 'decoration/workdocs/tutorials/for-developers.md'",
58
+ required: true,
59
+ },
60
+ ],
61
+ load: makeLoader("workdocs"),
62
+ },
63
+ ];
64
+ exports.decorationResourceTemplates.splice(0, exports.decorationResourceTemplates.length, ...templates);
65
+ return exports.decorationResourceTemplates;
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC90ZW1wbGF0ZXMvcmVzb3VyY2UtdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWVBLDRFQTBEQztBQXpFRCxnREFBd0I7QUFFeEIsa0RBQW1FO0FBRXRELFFBQUEsMkJBQTJCLEdBQWlDLEVBQUUsQ0FBQztBQUU1RSxTQUFTLFVBQVUsQ0FBQyxJQUFrQztJQUNwRCxPQUFPLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQW9CLEVBQUUsRUFBRTtRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFBLDRCQUFnQixHQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDZCQUFpQixFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGdDQUFnQztJQUM5QyxNQUFNLFNBQVMsR0FBaUM7UUFDOUM7WUFDRSxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLFdBQVcsRUFDVCw2REFBNkQ7WUFDL0QsUUFBUSxFQUFFLFlBQVk7WUFDdEIsV0FBVyxFQUFFLDBCQUEwQjtZQUN2QyxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osV0FBVyxFQUNULGdFQUFnRTtvQkFDbEUsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7YUFDRjtZQUNELElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ3hCO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLFdBQVcsRUFDVCwrREFBK0Q7WUFDakUsUUFBUSxFQUFFLFlBQVk7WUFDdEIsV0FBVyxFQUFFLDRCQUE0QjtZQUN6QyxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osV0FBVyxFQUNULDZFQUE2RTtvQkFDL0UsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7YUFDRjtZQUNELElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzFCO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLFdBQVcsRUFDVCxrRUFBa0U7WUFDcEUsUUFBUSxFQUFFLFlBQVk7WUFDdEIsV0FBVyxFQUFFLCtCQUErQjtZQUM1QyxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osV0FBVyxFQUNULGlHQUFpRztvQkFDbkcsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7YUFDRjtZQUNELElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDO1NBQzdCO0tBQ0YsQ0FBQztJQUVGLG1DQUEyQixDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxFQUNELG1DQUEyQixDQUFDLE1BQU0sRUFDbEMsR0FBRyxTQUFTLENBQ2IsQ0FBQztJQUNGLE9BQU8sbUNBQTJCLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IERlY29yYXRpb25SZXNvdXJjZVRlbXBsYXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRXb3Jrc3BhY2VSb290LCByZWFkV29ya3NwYWNlRmlsZSB9IGZyb20gXCIuLi93b3Jrc3BhY2VcIjtcblxuZXhwb3J0IGNvbnN0IGRlY29yYXRpb25SZXNvdXJjZVRlbXBsYXRlczogRGVjb3JhdGlvblJlc291cmNlVGVtcGxhdGVbXSA9IFtdO1xuXG5mdW5jdGlvbiBtYWtlTG9hZGVyKHR5cGU6IFwic3JjXCIgfCBcInRlc3RzXCIgfCBcIndvcmtkb2NzXCIpIHtcbiAgcmV0dXJuIGFzeW5jICh7IHBhdGg6IHJlbGF0aXZlIH06IHsgcGF0aDogc3RyaW5nIH0pID0+IHtcbiAgICBjb25zdCByb290ID0gZ2V0V29ya3NwYWNlUm9vdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbih0eXBlLCByZWxhdGl2ZSk7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWRXb3Jrc3BhY2VGaWxlKHJvb3QsIHRhcmdldCk7XG4gICAgcmV0dXJuIHsgdGV4dCB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGREZWNvcmF0aW9uUmVzb3VyY2VUZW1wbGF0ZXMoKTogRGVjb3JhdGlvblJlc291cmNlVGVtcGxhdGVbXSB7XG4gIGNvbnN0IHRlbXBsYXRlczogRGVjb3JhdGlvblJlc291cmNlVGVtcGxhdGVbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBcInJlYWQtY29kZS1mcm9tLXNvdXJjZVwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUmVhZCBhIGZpbGUgZnJvbSB0aGUgPGJhc2VfcGF0aD4vc3JjIHRyZWUgYnkgcmVsYXRpdmUgcGF0aC5cIixcbiAgICAgIG1pbWVUeXBlOiBcInRleHQvcGxhaW5cIixcbiAgICAgIHVyaVRlbXBsYXRlOiBcImZyb20tc291cmNlOi8vc3JjL3twYXRofVwiLFxuICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBhdGhcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwiUGF0aCB1bmRlciA8YmFzZV9wYXRoPi9zcmMgdG8gbG9hZCwgZS5nLiAnZGVjb3JhdGlvbi90eXBlcy50cydcIixcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2FkOiBtYWtlTG9hZGVyKFwic3JjXCIpLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyZWFkLXRlc3QtZnJvbS1zb3VyY2VcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJlYWQgYSBmaWxlIGZyb20gdGhlIDxiYXNlX3BhdGg+L3Rlc3RzIHRyZWUgYnkgcmVsYXRpdmUgcGF0aC5cIixcbiAgICAgIG1pbWVUeXBlOiBcInRleHQvcGxhaW5cIixcbiAgICAgIHVyaVRlbXBsYXRlOiBcImZyb20tc291cmNlOi8vdGVzdHMve3BhdGh9XCIsXG4gICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGF0aFwiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgXCJQYXRoIHVuZGVyIDxiYXNlX3BhdGg+L3Rlc3RzIHRvIGxvYWQsIGUuZy4gJ2RlY29yYXRpb24vdGVzdHMvdHlwZXMudGVzdC50cydcIixcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2FkOiBtYWtlTG9hZGVyKFwidGVzdHNcIiksXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJlYWQtZG9jLWZyb20tc291cmNlXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSZWFkIGEgZmlsZSBmcm9tIHRoZSA8YmFzZV9wYXRoPi93b3JrZG9jcyB0cmVlIGJ5IHJlbGF0aXZlIHBhdGguXCIsXG4gICAgICBtaW1lVHlwZTogXCJ0ZXh0L3BsYWluXCIsXG4gICAgICB1cmlUZW1wbGF0ZTogXCJmcm9tLXNvdXJjZTovL3dvcmtkb2NzL3twYXRofVwiLFxuICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBhdGhcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwiUGF0aCB1bmRlciA8YmFzZV9wYXRoPi93b3JrZG9jcyB0byBsb2FkLCBlLmcuICdkZWNvcmF0aW9uL3dvcmtkb2NzL3R1dG9yaWFscy9mb3ItZGV2ZWxvcGVycy5tZCdcIixcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsb2FkOiBtYWtlTG9hZGVyKFwid29ya2RvY3NcIiksXG4gICAgfSxcbiAgXTtcblxuICBkZWNvcmF0aW9uUmVzb3VyY2VUZW1wbGF0ZXMuc3BsaWNlKFxuICAgIDAsXG4gICAgZGVjb3JhdGlvblJlc291cmNlVGVtcGxhdGVzLmxlbmd0aCxcbiAgICAuLi50ZW1wbGF0ZXNcbiAgKTtcbiAgcmV0dXJuIGRlY29yYXRpb25SZXNvdXJjZVRlbXBsYXRlcztcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { DecorationResourceTemplate } from "../types";
2
+ export declare const decorationResourceTemplates: DecorationResourceTemplate[];
3
+ export declare function buildDecorationResourceTemplates(): DecorationResourceTemplate[];
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workspaceResourceTemplates = void 0;
4
+ exports.buildWorkspaceResourceTemplates = buildWorkspaceResourceTemplates;
5
+ const workspace_1 = require("./../workspace.cjs");
6
+ exports.workspaceResourceTemplates = [];
7
+ function buildWorkspaceResourceTemplates() {
8
+ const root = (0, workspace_1.getWorkspaceRoot)();
9
+ const sharedArguments = [
10
+ {
11
+ name: "path",
12
+ description: "Path relative to the workspace root",
13
+ required: true,
14
+ },
15
+ ];
16
+ const templates = [
17
+ {
18
+ name: "vscode-workspace-file",
19
+ description: "Expose workspace files to Visual Studio Code via vscode:// URIs",
20
+ uriTemplate: "vscode://workspace/{path}",
21
+ mimeType: "text/plain",
22
+ arguments: sharedArguments,
23
+ load: async (args) => {
24
+ try {
25
+ const text = await (0, workspace_1.readWorkspaceFile)(root, args.path);
26
+ return { text: String(text) };
27
+ }
28
+ catch (err) {
29
+ // propagate as-is for tests to assert errors
30
+ throw err;
31
+ }
32
+ },
33
+ },
34
+ {
35
+ name: "cursor-workspace-file",
36
+ description: "Expose workspace files to Cursor via cursor:// URIs",
37
+ uriTemplate: "cursor://workspace/{path}",
38
+ mimeType: "text/plain",
39
+ arguments: sharedArguments,
40
+ load: async (args) => {
41
+ try {
42
+ const text = await (0, workspace_1.readWorkspaceFile)(root, args.path);
43
+ return { text: String(text) };
44
+ }
45
+ catch (err) {
46
+ throw err;
47
+ }
48
+ },
49
+ },
50
+ {
51
+ name: "copilot-workspace-file",
52
+ description: "Expose workspace files to GitHub Copilot via copilot:// URIs",
53
+ uriTemplate: "copilot://workspace/{path}",
54
+ mimeType: "text/plain",
55
+ arguments: sharedArguments,
56
+ load: async (args) => {
57
+ try {
58
+ const text = await (0, workspace_1.readWorkspaceFile)(root, args.path);
59
+ return { text: String(text) };
60
+ }
61
+ catch (err) {
62
+ throw err;
63
+ }
64
+ },
65
+ },
66
+ ];
67
+ exports.workspaceResourceTemplates.splice(0, exports.workspaceResourceTemplates.length, ...templates);
68
+ return exports.workspaceResourceTemplates;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AvdGVtcGxhdGVzL3dvcmtzcGFjZS10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsMEVBbUVDO0FBdkVELGtEQUFtRTtBQUV0RCxRQUFBLDBCQUEwQixHQUFnQyxFQUFFLENBQUM7QUFFMUUsU0FBZ0IsK0JBQStCO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUEsNEJBQWdCLEdBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRztRQUN0QjtZQUNFLElBQUksRUFBRSxNQUFNO1lBQ1osV0FBVyxFQUFFLHFDQUFxQztZQUNsRCxRQUFRLEVBQUUsSUFBSTtTQUNmO0tBQ08sQ0FBQztJQUVYLE1BQU0sU0FBUyxHQUFnQztRQUM3QztZQUNFLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsV0FBVyxFQUNULGlFQUFpRTtZQUNuRSxXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBc0IsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDZCQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYiw2Q0FBNkM7b0JBQzdDLE1BQU0sR0FBRyxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsV0FBVyxFQUFFLHFEQUFxRDtZQUNsRSxXQUFXLEVBQUUsMkJBQTJCO1lBQ3hDLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBc0IsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDZCQUFpQixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixNQUFNLEdBQUcsQ0FBQztnQkFDWixDQUFDO1lBQ0gsQ0FBQztTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLFdBQVcsRUFDVCw4REFBOEQ7WUFDaEUsV0FBVyxFQUFFLDRCQUE0QjtZQUN6QyxRQUFRLEVBQUUsWUFBWTtZQUN0QixTQUFTLEVBQUUsZUFBZTtZQUMxQixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQXNCLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSw2QkFBaUIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsTUFBTSxHQUFHLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUM7U0FDRjtLQUNGLENBQUM7SUFFRixrQ0FBMEIsQ0FBQyxNQUFNLENBQy9CLENBQUMsRUFDRCxrQ0FBMEIsQ0FBQyxNQUFNLEVBQ2pDLEdBQUcsU0FBUyxDQUNiLENBQUM7SUFDRixPQUFPLGtDQUEwQixDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRXb3Jrc3BhY2VSb290LCByZWFkV29ya3NwYWNlRmlsZSB9IGZyb20gXCIuLi93b3Jrc3BhY2VcIjtcblxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVJlc291cmNlVGVtcGxhdGVzOiBXb3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlW10gPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV29ya3NwYWNlUmVzb3VyY2VUZW1wbGF0ZXMoKTogV29ya3NwYWNlUmVzb3VyY2VUZW1wbGF0ZVtdIHtcbiAgY29uc3Qgcm9vdCA9IGdldFdvcmtzcGFjZVJvb3QoKTtcbiAgY29uc3Qgc2hhcmVkQXJndW1lbnRzID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwicGF0aFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiUGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIHJvb3RcIixcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIF0gYXMgY29uc3Q7XG5cbiAgY29uc3QgdGVtcGxhdGVzOiBXb3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogXCJ2c2NvZGUtd29ya3NwYWNlLWZpbGVcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkV4cG9zZSB3b3Jrc3BhY2UgZmlsZXMgdG8gVmlzdWFsIFN0dWRpbyBDb2RlIHZpYSB2c2NvZGU6Ly8gVVJJc1wiLFxuICAgICAgdXJpVGVtcGxhdGU6IFwidnNjb2RlOi8vd29ya3NwYWNlL3twYXRofVwiLFxuICAgICAgbWltZVR5cGU6IFwidGV4dC9wbGFpblwiLFxuICAgICAgYXJndW1lbnRzOiBzaGFyZWRBcmd1bWVudHMsXG4gICAgICBsb2FkOiBhc3luYyAoYXJnczogeyBwYXRoOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZWFkV29ya3NwYWNlRmlsZShyb290LCBhcmdzLnBhdGgpO1xuICAgICAgICAgIHJldHVybiB7IHRleHQ6IFN0cmluZyh0ZXh0KSB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBwcm9wYWdhdGUgYXMtaXMgZm9yIHRlc3RzIHRvIGFzc2VydCBlcnJvcnNcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImN1cnNvci13b3Jrc3BhY2UtZmlsZVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRXhwb3NlIHdvcmtzcGFjZSBmaWxlcyB0byBDdXJzb3IgdmlhIGN1cnNvcjovLyBVUklzXCIsXG4gICAgICB1cmlUZW1wbGF0ZTogXCJjdXJzb3I6Ly93b3Jrc3BhY2Uve3BhdGh9XCIsXG4gICAgICBtaW1lVHlwZTogXCJ0ZXh0L3BsYWluXCIsXG4gICAgICBhcmd1bWVudHM6IHNoYXJlZEFyZ3VtZW50cyxcbiAgICAgIGxvYWQ6IGFzeW5jIChhcmdzOiB7IHBhdGg6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWRXb3Jrc3BhY2VGaWxlKHJvb3QsIGFyZ3MucGF0aCk7XG4gICAgICAgICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHRleHQpIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29waWxvdC13b3Jrc3BhY2UtZmlsZVwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRXhwb3NlIHdvcmtzcGFjZSBmaWxlcyB0byBHaXRIdWIgQ29waWxvdCB2aWEgY29waWxvdDovLyBVUklzXCIsXG4gICAgICB1cmlUZW1wbGF0ZTogXCJjb3BpbG90Oi8vd29ya3NwYWNlL3twYXRofVwiLFxuICAgICAgbWltZVR5cGU6IFwidGV4dC9wbGFpblwiLFxuICAgICAgYXJndW1lbnRzOiBzaGFyZWRBcmd1bWVudHMsXG4gICAgICBsb2FkOiBhc3luYyAoYXJnczogeyBwYXRoOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZWFkV29ya3NwYWNlRmlsZShyb290LCBhcmdzLnBhdGgpO1xuICAgICAgICAgIHJldHVybiB7IHRleHQ6IFN0cmluZyh0ZXh0KSB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICB3b3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlcy5zcGxpY2UoXG4gICAgMCxcbiAgICB3b3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlcy5sZW5ndGgsXG4gICAgLi4udGVtcGxhdGVzXG4gICk7XG4gIHJldHVybiB3b3Jrc3BhY2VSZXNvdXJjZVRlbXBsYXRlcztcbn1cblxuIl19
@@ -0,0 +1,3 @@
1
+ import { WorkspaceResourceTemplate } from "../types";
2
+ export declare const workspaceResourceTemplates: WorkspaceResourceTemplate[];
3
+ export declare function buildWorkspaceResourceTemplates(): WorkspaceResourceTemplate[];
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readmeImprovementTool = exports.coverageEnforcerTool = exports.documentObjectTool = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const child_process_1 = require("child_process");
10
+ const schemas_1 = require("./../schemas.cjs");
11
+ const workspace_1 = require("./../workspace.cjs");
12
+ const prompts_1 = require("./../prompts/prompts.cjs");
13
+ const utils_1 = require("./../utils.cjs");
14
+ const code_1 = require("./../code.cjs");
15
+ function relativeFiles(root, files) {
16
+ return files.map((file) => path_1.default.relative(root, file)).sort();
17
+ }
18
+ function collectPromptSections(names) {
19
+ const root = (0, workspace_1.getWorkspaceRoot)();
20
+ const promptIndex = new Map((0, prompts_1.discoverDocPrompts)(root).map((prompt) => [prompt.name, prompt]));
21
+ return names
22
+ .map((name) => promptIndex.get(name))
23
+ .filter((prompt) => Boolean(prompt))
24
+ .map((prompt) => ({
25
+ name: prompt.name,
26
+ title: prompt.title,
27
+ description: prompt.description,
28
+ content: prompt.content,
29
+ absolutePath: prompt.absolutePath,
30
+ }));
31
+ }
32
+ function parseTaskLines(content) {
33
+ return content
34
+ .split(/\r?\n/)
35
+ .map((line) => line.trim())
36
+ .filter((line) => /^task\s+\d+/i.test(line));
37
+ }
38
+ function computeCoverageFromFinal(coveragePath) {
39
+ const payload = JSON.parse(fs_1.default.readFileSync(coveragePath, "utf8"));
40
+ const totals = {
41
+ statements: { covered: 0, total: 0 },
42
+ functions: { covered: 0, total: 0 },
43
+ branches: { covered: 0, total: 0 },
44
+ };
45
+ const files = Object.entries(payload).map(([filePath, info]) => {
46
+ const statementCounts = Object.values(info.s);
47
+ const functionCounts = Object.values(info.f);
48
+ const branchCounts = Object.values(info.b).flatMap((value) => Array.isArray(value) ? value : [value]);
49
+ const statementTotal = statementCounts.length;
50
+ const functionTotal = functionCounts.length;
51
+ const branchTotal = branchCounts.length;
52
+ const statementCovered = statementCounts.filter((count) => count > 0).length;
53
+ const functionCovered = functionCounts.filter((count) => count > 0).length;
54
+ const branchCovered = branchCounts.filter((count) => count > 0).length;
55
+ totals.statements.covered += statementCovered;
56
+ totals.statements.total += statementTotal;
57
+ totals.functions.covered += functionCovered;
58
+ totals.functions.total += functionTotal;
59
+ totals.branches.covered += branchCovered;
60
+ totals.branches.total += branchTotal;
61
+ const pct = (covered, total) => total === 0 ? 100 : Number(((covered / total) * 100).toFixed(2));
62
+ return {
63
+ path: filePath,
64
+ statements: pct(statementCovered, statementTotal),
65
+ functions: pct(functionCovered, functionTotal),
66
+ branches: pct(branchCovered, branchTotal),
67
+ };
68
+ });
69
+ const pct = (covered, total) => total === 0 ? 100 : Number(((covered / total) * 100).toFixed(2));
70
+ return {
71
+ totals: {
72
+ statements: {
73
+ ...totals.statements,
74
+ pct: pct(totals.statements.covered, totals.statements.total),
75
+ },
76
+ functions: {
77
+ ...totals.functions,
78
+ pct: pct(totals.functions.covered, totals.functions.total),
79
+ },
80
+ branches: {
81
+ ...totals.branches,
82
+ pct: pct(totals.branches.covered, totals.branches.total),
83
+ },
84
+ },
85
+ files,
86
+ };
87
+ }
88
+ function normalizePromptSections(sections) {
89
+ return sections.map((section) => ({
90
+ name: section.name,
91
+ title: section.title,
92
+ tasks: parseTaskLines(section.content),
93
+ content: section.content,
94
+ }));
95
+ }
96
+ async function resolveRepoRoot(basePath) {
97
+ const root = (0, workspace_1.getWorkspaceRoot)();
98
+ try {
99
+ return (0, workspace_1.resolveInWorkspace)(root, basePath);
100
+ }
101
+ catch (error) {
102
+ if (error instanceof workspace_1.WorkspaceError) {
103
+ await (0, workspace_1.throwUserError)(error.message);
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ exports.documentObjectTool = {
109
+ name: "document-object",
110
+ description: "Create a documentation plan for a specific object type using .codex prompts and repository analysis.",
111
+ parameters: schemas_1.documentObjectSchema,
112
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
113
+ execute: async (input, _context) => {
114
+ const args = schemas_1.documentObjectSchema.parse(input);
115
+ const repoRoot = await resolveRepoRoot(args.basePath);
116
+ const dependencies = (0, prompts_1.getObjectPromptDependencies)()[args.objectType] ?? [];
117
+ if (!dependencies.length) {
118
+ await (0, workspace_1.throwUserError)(`No prompt guidance configured for object type ${args.objectType}`);
119
+ }
120
+ const sections = normalizePromptSections(collectPromptSections(dependencies));
121
+ const srcDir = path_1.default.join(repoRoot, "src");
122
+ const testDir = path_1.default.join(repoRoot, "tests");
123
+ const sourceFiles = fs_1.default.existsSync(srcDir)
124
+ ? (0, utils_1.listFilesRecursive)(srcDir, code_1.isSourceFile)
125
+ : [];
126
+ const testFiles = fs_1.default.existsSync(testDir)
127
+ ? (0, utils_1.listFilesRecursive)(testDir, (file) => (0, code_1.isSourceFile)(file) && (0, code_1.isTestFile)(file))
128
+ : [];
129
+ let targetFileContent;
130
+ if (args.targetFile) {
131
+ try {
132
+ const absolute = (0, workspace_1.resolveInWorkspace)(repoRoot, args.targetFile);
133
+ targetFileContent = (0, utils_1.readFileSafe)(absolute) ?? undefined;
134
+ }
135
+ catch (error) {
136
+ if (error instanceof workspace_1.WorkspaceError) {
137
+ await (0, workspace_1.throwUserError)(error.message);
138
+ }
139
+ throw error;
140
+ }
141
+ }
142
+ const payload = {
143
+ basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
144
+ objectType: args.objectType,
145
+ targetFile: args.targetFile,
146
+ guidance: sections,
147
+ files: {
148
+ source: relativeFiles(repoRoot, sourceFiles),
149
+ tests: relativeFiles(repoRoot, testFiles),
150
+ },
151
+ targetFileContent: args.includeContent ? targetFileContent : undefined,
152
+ };
153
+ return {
154
+ content: [
155
+ {
156
+ type: "text",
157
+ text: JSON.stringify(payload, null, 2),
158
+ },
159
+ ],
160
+ };
161
+ },
162
+ };
163
+ exports.coverageEnforcerTool = {
164
+ name: "ensure-test-coverage",
165
+ description: "Run the configured coverage command and report whether the target percentage is met, highlighting weak files.",
166
+ parameters: schemas_1.coverageTaskSchema,
167
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
168
+ execute: async (input, _context) => {
169
+ const args = schemas_1.coverageTaskSchema.parse(input);
170
+ const repoRoot = await resolveRepoRoot(args.basePath);
171
+ if (!args.dryRun) {
172
+ const env = {
173
+ ...process.env,
174
+ USE_WATCHMAN: "false",
175
+ WATCHMAN_DISABLE: "1",
176
+ JEST_DISABLE_WATCHMAN: "1",
177
+ };
178
+ const result = (0, child_process_1.spawnSync)("npm", ["run", "coverage", "--", "--watchman=false", "--runInBand"], { cwd: repoRoot, env, encoding: "utf8" });
179
+ if (result.status !== 0) {
180
+ const message = result.stderr || result.stdout || "Coverage command failed";
181
+ await (0, workspace_1.throwUserError)(message.trim());
182
+ }
183
+ }
184
+ const coveragePath = path_1.default.join(repoRoot, "workdocs", "reports", "coverage", "coverage-final.json");
185
+ if (!fs_1.default.existsSync(coveragePath)) {
186
+ await (0, workspace_1.throwUserError)(`Coverage report not found at ${path_1.default.relative(repoRoot, coveragePath)}`);
187
+ }
188
+ const summary = computeCoverageFromFinal(coveragePath);
189
+ const meetsThreshold = summary.totals.statements.pct >= args.coverage &&
190
+ summary.totals.functions.pct >= args.coverage &&
191
+ summary.totals.branches.pct >= args.coverage;
192
+ const weakest = [...summary.files]
193
+ .sort((a, b) => a.statements - b.statements)
194
+ .slice(0, 10);
195
+ const guidance = normalizePromptSections(collectPromptSections(["bulk-tests"]));
196
+ const payload = {
197
+ basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
198
+ target: args.coverage,
199
+ meetsThreshold,
200
+ totals: summary.totals,
201
+ weakest,
202
+ guidance,
203
+ };
204
+ return {
205
+ content: [
206
+ {
207
+ type: "text",
208
+ text: JSON.stringify(payload, null, 2),
209
+ },
210
+ ],
211
+ };
212
+ },
213
+ };
214
+ exports.readmeImprovementTool = {
215
+ name: "improve-readme",
216
+ description: "Summarize required steps to refresh README and workdocs content using .codex guidance and repository analysis.",
217
+ parameters: schemas_1.readmeImprovementSchema,
218
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
+ execute: async (input, _context) => {
220
+ const args = schemas_1.readmeImprovementSchema.parse(input);
221
+ const repoRoot = await resolveRepoRoot(args.basePath);
222
+ const analysis = (0, code_1.analyzeRepo)(repoRoot);
223
+ const modules = analysis.files
224
+ .filter((file) => /index\.ts$/.test(file))
225
+ .map((file) => path_1.default.relative(repoRoot, file));
226
+ const promptSections = normalizePromptSections(collectPromptSections(["update-readme", "doc", "module"]));
227
+ const testExamples = Object.keys(analysis.tests ?? {});
228
+ const examples = args.includeExamples ? testExamples.slice(0, 20) : [];
229
+ const payload = {
230
+ basePath: path_1.default.relative((0, workspace_1.getWorkspaceRoot)(), repoRoot) || ".",
231
+ summary: {
232
+ modules,
233
+ totalSourceFiles: analysis.files.length,
234
+ totalTestFiles: analysis.testFiles.length,
235
+ hasReadme: Boolean(analysis.readme),
236
+ },
237
+ guidance: promptSections,
238
+ suggestedExamples: examples,
239
+ };
240
+ return {
241
+ content: [
242
+ {
243
+ type: "text",
244
+ text: JSON.stringify(payload, null, 2),
245
+ },
246
+ ],
247
+ };
248
+ },
249
+ };
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2NvZGV4LXRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsaURBQTBDO0FBRTFDLDhDQUlvQjtBQU1wQixrREFLc0I7QUFDdEIsc0RBSTRCO0FBRTVCLDBDQUE0RDtBQUM1RCx3Q0FBZ0U7QUFVaEUsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLEtBQWU7SUFDbEQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxjQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEtBQXdCO0lBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUEsNEJBQWdCLEdBQUUsQ0FBQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FDekIsSUFBQSw0QkFBa0IsRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUNoRSxDQUFDO0lBQ0YsT0FBTyxLQUFLO1NBQ1QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4RCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNu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QUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV2RSxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRSxjQUFJLENBQUMsUUFBUSxDQUFDLElBQUEsNEJBQWdCLEdBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHO1lBQzVELE9BQU8sRUFBRTtnQkFDUCxPQUFPO2dCQUNQLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDdkMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFDekMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ3BDO1lBQ0QsUUFBUSxFQUFFLGNBQWM7WUFDeEIsaUJBQWlCLEVBQUUsUUFBUTtTQUM1QixDQUFDO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtTQUNzQixDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRlbnRSZXN1bHQsIFRvb2wgfSBmcm9tIFwiZmFzdG1jcFwiO1xuaW1wb3J0IHtcbiAgZG9jdW1lbnRPYmplY3RTY2hlbWEsXG4gIGNvdmVyYWdlVGFza1NjaGVtYSxcbiAgcmVhZG1lSW1wcm92ZW1lbnRTY2hlbWEsXG59IGZyb20gXCIuLi9zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBEb2N1bWVudE9iamVjdEFyZ3MsXG4gIENvdmVyYWdlVGFza0FyZ3MsXG4gIFJlYWRtZUltcHJvdmVtZW50QXJncyxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRXb3Jrc3BhY2VSb290LFxuICByZXNvbHZlSW5Xb3Jrc3BhY2UsXG4gIHRocm93VXNlckVycm9yLFxuICBXb3Jrc3BhY2VFcnJvcixcbn0gZnJvbSBcIi4uL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHtcbiAgYnVpbGRPYmplY3RQcm9tcHRzLFxuICBkaXNjb3ZlckRvY1Byb21wdHMsXG4gIGdldE9iamVjdFByb21wdERlcGVuZGVuY2llcyxcbn0gZnJvbSBcIi4uL3Byb21wdHMvcHJvbXB0c1wiO1xuaW1wb3J0IHR5cGUgeyBEb2NQcm9tcHQgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGxpc3RGaWxlc1JlY3Vyc2l2ZSwgcmVhZEZpbGVTYWZlIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBhbmFseXplUmVwbywgaXNTb3VyY2VGaWxlLCBpc1Rlc3RGaWxlIH0gZnJvbSBcIi4uL2NvZGVcIjtcblxudHlwZSBQcm9tcHRTZWN0aW9uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgYWJzb2x1dGVQYXRoPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gcmVsYXRpdmVGaWxlcyhyb290OiBzdHJpbmcsIGZpbGVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gcGF0aC5yZWxhdGl2ZShyb290LCBmaWxlKSkuc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0UHJvbXB0U2VjdGlvbnMobmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbXB0U2VjdGlvbltdIHtcbiAgY29uc3Qgcm9vdCA9IGdldFdvcmtzcGFjZVJvb3QoKTtcbiAgY29uc3QgcHJvbXB0SW5kZXggPSBuZXcgTWFwPHN0cmluZywgRG9jUHJvbXB0PihcbiAgICBkaXNjb3ZlckRvY1Byb21wdHMocm9vdCkubWFwKChwcm9tcHQpID0+IFtwcm9tcHQubmFtZSwgcHJvbXB0XSlcbiAgKTtcbiAgcmV0dXJuIG5hbWVzXG4gICAgLm1hcCgobmFtZSkgPT4gcHJvbXB0SW5kZXguZ2V0KG5hbWUpKVxuICAgIC5maWx0ZXIoKHByb21wdCk6IHByb21wdCBpcyBEb2NQcm9tcHQgPT4gQm9vbGVhbihwcm9tcHQpKVxuICAgIC5tYXAoKHByb21wdCkgPT4gKHtcbiAgICAgIG5hbWU6IHByb21wdC5uYW1lLFxuICAgICAgdGl0bGU6IHByb21wdC50aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9tcHQuZGVzY3JpcHRpb24sXG4gICAgICBjb250ZW50OiBwcm9tcHQuY29udGVudCxcbiAgICAgIGFic29sdXRlUGF0aDogcHJvbXB0LmFic29sdXRlUGF0aCxcbiAgICB9KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGFza0xpbmVzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAuc3BsaXQoL1xccj9cXG4vKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+IC9edGFza1xccytcXGQrL2kudGVzdChsaW5lKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDb3ZlcmFnZUZyb21GaW5hbChjb3ZlcmFnZVBhdGg6IHN0cmluZykge1xuICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY292ZXJhZ2VQYXRoLCBcInV0ZjhcIikpIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgczogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICAgIGY6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgICBiOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBudW1iZXJbXT47XG4gICAgfVxuICA+O1xuXG4gIGNvbnN0IHRvdGFscyA9IHtcbiAgICBzdGF0ZW1lbnRzOiB7IGNvdmVyZWQ6IDAsIHRvdGFsOiAwIH0sXG4gICAgZnVuY3Rpb25zOiB7IGNvdmVyZWQ6IDAsIHRvdGFsOiAwIH0sXG4gICAgYnJhbmNoZXM6IHsgY292ZXJlZDogMCwgdG90YWw6IDAgfSxcbiAgfTtcblxuICBjb25zdCBmaWxlcyA9IE9iamVjdC5lbnRyaWVzKHBheWxvYWQpLm1hcCgoW2ZpbGVQYXRoLCBpbmZvXSkgPT4ge1xuICAgIGNvbnN0IHN0YXRlbWVudENvdW50cyA9IE9iamVjdC52YWx1ZXMoaW5mby5zKTtcbiAgICBjb25zdCBmdW5jdGlvbkNvdW50cyA9IE9iamVjdC52YWx1ZXMoaW5mby5mKTtcbiAgICBjb25zdCBicmFuY2hDb3VudHMgPSBPYmplY3QudmFsdWVzKGluZm8uYikuZmxhdE1hcCgodmFsdWUpID0+XG4gICAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRUb3RhbCA9IHN0YXRlbWVudENvdW50cy5sZW5ndGg7XG4gICAgY29uc3QgZnVuY3Rpb25Ub3RhbCA9IGZ1bmN0aW9uQ291bnRzLmxlbmd0aDtcbiAgICBjb25zdCBicmFuY2hUb3RhbCA9IGJyYW5jaENvdW50cy5sZW5ndGg7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRDb3ZlcmVkID0gc3RhdGVtZW50Q291bnRzLmZpbHRlcihcbiAgICAgIChjb3VudCkgPT4gY291bnQgPiAwXG4gICAgKS5sZW5ndGg7XG4gICAgY29uc3QgZnVuY3Rpb25Db3ZlcmVkID0gZnVuY3Rpb25Db3VudHMuZmlsdGVyKChjb3VudCkgPT4gY291bnQgPiAwKS5sZW5ndGg7XG4gICAgY29uc3QgYnJhbmNoQ292ZXJlZCA9IGJyYW5jaENvdW50cy5maWx0ZXIoKGNvdW50KSA9PiBjb3VudCA+IDApLmxlbmd0aDtcblxuICAgIHRvdGFscy5zdGF0ZW1lbnRzLmNvdmVyZWQgKz0gc3RhdGVtZW50Q292ZXJlZDtcbiAgICB0b3RhbHMuc3RhdGVtZW50cy50b3RhbCArPSBzdGF0ZW1lbnRUb3RhbDtcbiAgICB0b3RhbHMuZnVuY3Rpb25zLmNvdmVyZWQgKz0gZnVuY3Rpb25Db3ZlcmVkO1xuICAgIHRvdGFscy5mdW5jdGlvbnMudG90YWwgKz0gZnVuY3Rpb25Ub3RhbDtcbiAgICB0b3RhbHMuYnJhbmNoZXMuY292ZXJlZCArPSBicmFuY2hDb3ZlcmVkO1xuICAgIHRvdGFscy5icmFuY2hlcy50b3RhbCArPSBicmFuY2hUb3RhbDtcblxuICAgIGNvbnN0IHBjdCA9IChjb3ZlcmVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpID0+XG4gICAgICB0b3RhbCA9PT0gMCA/IDEwMCA6IE51bWJlcigoKGNvdmVyZWQgLyB0b3RhbCkgKiAxMDApLnRvRml4ZWQoMikpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgc3RhdGVtZW50czogcGN0KHN0YXRlbWVudENvdmVyZWQsIHN0YXRlbWVudFRvdGFsKSxcbiAgICAgIGZ1bmN0aW9uczogcGN0KGZ1bmN0aW9uQ292ZXJlZCwgZnVuY3Rpb25Ub3RhbCksXG4gICAgICBicmFuY2hlczogcGN0KGJyYW5jaENvdmVyZWQsIGJyYW5jaFRvdGFsKSxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdCBwY3QgPSAoY292ZXJlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyKSA9PlxuICAgIHRvdGFsID09PSAwID8gMTAwIDogTnVtYmVyKCgoY292ZXJlZCAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgyKSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b3RhbHM6IHtcbiAgICAgIHN0YXRlbWVudHM6IHtcbiAgICAgICAgLi4udG90YWxzLnN0YXRlbWVudHMsXG4gICAgICAgIHBjdDogcGN0KHRvdGFscy5zdGF0ZW1lbnRzLmNvdmVyZWQsIHRvdGFscy5zdGF0ZW1lbnRzLnRvdGFsKSxcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbnM6IHtcbiAgICAgICAgLi4udG90YWxzLmZ1bmN0aW9ucyxcbiAgICAgICAgcGN0OiBwY3QodG90YWxzLmZ1bmN0aW9ucy5jb3ZlcmVkLCB0b3RhbHMuZnVuY3Rpb25zLnRvdGFsKSxcbiAgICAgIH0sXG4gICAgICBicmFuY2hlczoge1xuICAgICAgICAuLi50b3RhbHMuYnJhbmNoZXMsXG4gICAgICAgIHBjdDogcGN0KHRvdGFscy5icmFuY2hlcy5jb3ZlcmVkLCB0b3RhbHMuYnJhbmNoZXMudG90YWwpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGZpbGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQcm9tcHRTZWN0aW9ucyhzZWN0aW9uczogUHJvbXB0U2VjdGlvbltdKSB7XG4gIHJldHVybiBzZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+ICh7XG4gICAgbmFtZTogc2VjdGlvbi5uYW1lLFxuICAgIHRpdGxlOiBzZWN0aW9uLnRpdGxlLFxuICAgIHRhc2tzOiBwYXJzZVRhc2tMaW5lcyhzZWN0aW9uLmNvbnRlbnQpLFxuICAgIGNvbnRlbnQ6IHNlY3Rpb24uY29udGVudCxcbiAgfSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUmVwb1Jvb3QoYmFzZVBhdGg6IHN0cmluZykge1xuICBjb25zdCByb290ID0gZ2V0V29ya3NwYWNlUm9vdCgpO1xuICB0cnkge1xuICAgIHJldHVybiByZXNvbHZlSW5Xb3Jrc3BhY2Uocm9vdCwgYmFzZVBhdGgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFdvcmtzcGFjZUVycm9yKSB7XG4gICAgICBhd2FpdCB0aHJvd1VzZXJFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRvY3VtZW50T2JqZWN0VG9vbDogVG9vbDx1bmRlZmluZWQsIHR5cGVvZiBkb2N1bWVudE9iamVjdFNjaGVtYT4gPVxuICB7XG4gICAgbmFtZTogXCJkb2N1bWVudC1vYmplY3RcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQ3JlYXRlIGEgZG9jdW1lbnRhdGlvbiBwbGFuIGZvciBhIHNwZWNpZmljIG9iamVjdCB0eXBlIHVzaW5nIC5jb2RleCBwcm9tcHRzIGFuZCByZXBvc2l0b3J5IGFuYWx5c2lzLlwiLFxuICAgIHBhcmFtZXRlcnM6IGRvY3VtZW50T2JqZWN0U2NoZW1hLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIF9jb250ZXh0KTogUHJvbWlzZTxDb250ZW50UmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCBhcmdzID0gZG9jdW1lbnRPYmplY3RTY2hlbWEucGFyc2UoaW5wdXQgYXMgRG9jdW1lbnRPYmplY3RBcmdzKTtcbiAgICAgIGNvbnN0IHJlcG9Sb290ID0gYXdhaXQgcmVzb2x2ZVJlcG9Sb290KGFyZ3MuYmFzZVBhdGgpO1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBnZXRPYmplY3RQcm9tcHREZXBlbmRlbmNpZXMoKVthcmdzLm9iamVjdFR5cGVdID8/IFtdO1xuICAgICAgaWYgKCFkZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIGF3YWl0IHRocm93VXNlckVycm9yKFxuICAgICAgICAgIGBObyBwcm9tcHQgZ3VpZGFuY2UgY29uZmlndXJlZCBmb3Igb2JqZWN0IHR5cGUgJHthcmdzLm9iamVjdFR5cGV9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWN0aW9ucyA9IG5vcm1hbGl6ZVByb21wdFNlY3Rpb25zKFxuICAgICAgICBjb2xsZWN0UHJvbXB0U2VjdGlvbnMoZGVwZW5kZW5jaWVzKVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3JjRGlyID0gcGF0aC5qb2luKHJlcG9Sb290LCBcInNyY1wiKTtcbiAgICAgIGNvbnN0IHRlc3REaXIgPSBwYXRoLmpvaW4ocmVwb1Jvb3QsIFwidGVzdHNcIik7XG5cbiAgICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gZnMuZXhpc3RzU3luYyhzcmNEaXIpXG4gICAgICAgID8gbGlzdEZpbGVzUmVjdXJzaXZlKHNyY0RpciwgaXNTb3VyY2VGaWxlKVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgdGVzdEZpbGVzID0gZnMuZXhpc3RzU3luYyh0ZXN0RGlyKVxuICAgICAgICA/IGxpc3RGaWxlc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgIHRlc3REaXIsXG4gICAgICAgICAgICAoZmlsZSkgPT4gaXNTb3VyY2VGaWxlKGZpbGUpICYmIGlzVGVzdEZpbGUoZmlsZSlcbiAgICAgICAgICApXG4gICAgICAgIDogW107XG5cbiAgICAgIGxldCB0YXJnZXRGaWxlQ29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGFyZ3MudGFyZ2V0RmlsZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFic29sdXRlID0gcmVzb2x2ZUluV29ya3NwYWNlKHJlcG9Sb290LCBhcmdzLnRhcmdldEZpbGUpO1xuICAgICAgICAgIHRhcmdldEZpbGVDb250ZW50ID0gcmVhZEZpbGVTYWZlKGFic29sdXRlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV29ya3NwYWNlRXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHRocm93VXNlckVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBiYXNlUGF0aDogcGF0aC5yZWxhdGl2ZShnZXRXb3Jrc3BhY2VSb290KCksIHJlcG9Sb290KSB8fCBcIi5cIixcbiAgICAgICAgb2JqZWN0VHlwZTogYXJncy5vYmplY3RUeXBlLFxuICAgICAgICB0YXJnZXRGaWxlOiBhcmdzLnRhcmdldEZpbGUsXG4gICAgICAgIGd1aWRhbmNlOiBzZWN0aW9ucyxcbiAgICAgICAgZmlsZXM6IHtcbiAgICAgICAgICBzb3VyY2U6IHJlbGF0aXZlRmlsZXMocmVwb1Jvb3QsIHNvdXJjZUZpbGVzKSxcbiAgICAgICAgICB0ZXN0czogcmVsYXRpdmVGaWxlcyhyZXBvUm9vdCwgdGVzdEZpbGVzKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0RmlsZUNvbnRlbnQ6IGFyZ3MuaW5jbHVkZUNvbnRlbnQgPyB0YXJnZXRGaWxlQ29udGVudCA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9IHNhdGlzZmllcyBDb250ZW50UmVzdWx0O1xuICAgIH0sXG4gIH07XG5cbmV4cG9ydCBjb25zdCBjb3ZlcmFnZUVuZm9yY2VyVG9vbDogVG9vbDx1bmRlZmluZWQsIHR5cGVvZiBjb3ZlcmFnZVRhc2tTY2hlbWE+ID1cbiAge1xuICAgIG5hbWU6IFwiZW5zdXJlLXRlc3QtY292ZXJhZ2VcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUnVuIHRoZSBjb25maWd1cmVkIGNvdmVyYWdlIGNvbW1hbmQgYW5kIHJlcG9ydCB3aGV0aGVyIHRoZSB0YXJnZXQgcGVyY2VudGFnZSBpcyBtZXQsIGhpZ2hsaWdodGluZyB3ZWFrIGZpbGVzLlwiLFxuICAgIHBhcmFtZXRlcnM6IGNvdmVyYWdlVGFza1NjaGVtYSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBfY29udGV4dCk6IFByb21pc2U8Q29udGVudFJlc3VsdD4gPT4ge1xuICAgICAgY29uc3QgYXJncyA9IGNvdmVyYWdlVGFza1NjaGVtYS5wYXJzZShpbnB1dCBhcyBDb3ZlcmFnZVRhc2tBcmdzKTtcbiAgICAgIGNvbnN0IHJlcG9Sb290ID0gYXdhaXQgcmVzb2x2ZVJlcG9Sb290KGFyZ3MuYmFzZVBhdGgpO1xuXG4gICAgICBpZiAoIWFyZ3MuZHJ5UnVuKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICBVU0VfV0FUQ0hNQU46IFwiZmFsc2VcIixcbiAgICAgICAgICBXQVRDSE1BTl9ESVNBQkxFOiBcIjFcIixcbiAgICAgICAgICBKRVNUX0RJU0FCTEVfV0FUQ0hNQU46IFwiMVwiLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG4gICAgICAgICAgXCJucG1cIixcbiAgICAgICAgICBbXCJydW5cIiwgXCJjb3ZlcmFnZVwiLCBcIi0tXCIsIFwiLS13YXRjaG1hbj1mYWxzZVwiLCBcIi0tcnVuSW5CYW5kXCJdLFxuICAgICAgICAgIHsgY3dkOiByZXBvUm9vdCwgZW52LCBlbmNvZGluZzogXCJ1dGY4XCIgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgICByZXN1bHQuc3RkZXJyIHx8IHJlc3VsdC5zdGRvdXQgfHwgXCJDb3ZlcmFnZSBjb21tYW5kIGZhaWxlZFwiO1xuICAgICAgICAgIGF3YWl0IHRocm93VXNlckVycm9yKG1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb3ZlcmFnZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIHJlcG9Sb290LFxuICAgICAgICBcIndvcmtkb2NzXCIsXG4gICAgICAgIFwicmVwb3J0c1wiLFxuICAgICAgICBcImNvdmVyYWdlXCIsXG4gICAgICAgIFwiY292ZXJhZ2UtZmluYWwuanNvblwiXG4gICAgICApO1xuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY292ZXJhZ2VQYXRoKSkge1xuICAgICAgICBhd2FpdCB0aHJvd1VzZXJFcnJvcihcbiAgICAgICAgICBgQ292ZXJhZ2UgcmVwb3J0IG5vdCBmb3VuZCBhdCAke3BhdGgucmVsYXRpdmUocmVwb1Jvb3QsIGNvdmVyYWdlUGF0aCl9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdW1tYXJ5ID0gY29tcHV0ZUNvdmVyYWdlRnJvbUZpbmFsKGNvdmVyYWdlUGF0aCk7XG4gICAgICBjb25zdCBtZWV0c1RocmVzaG9sZCA9XG4gICAgICAgIHN1bW1hcnkudG90YWxzLnN0YXRlbWVudHMucGN0ID49IGFyZ3MuY292ZXJhZ2UgJiZcbiAgICAgICAgc3VtbWFyeS50b3RhbHMuZnVuY3Rpb25zLnBjdCA+PSBhcmdzLmNvdmVyYWdlICYmXG4gICAgICAgIHN1bW1hcnkudG90YWxzLmJyYW5jaGVzLnBjdCA+PSBhcmdzLmNvdmVyYWdlO1xuXG4gICAgICBjb25zdCB3ZWFrZXN0ID0gWy4uLnN1bW1hcnkuZmlsZXNdXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXRlbWVudHMgLSBiLnN0YXRlbWVudHMpXG4gICAgICAgIC5zbGljZSgwLCAxMCk7XG5cbiAgICAgIGNvbnN0IGd1aWRhbmNlID0gbm9ybWFsaXplUHJvbXB0U2VjdGlvbnMoXG4gICAgICAgIGNvbGxlY3RQcm9tcHRTZWN0aW9ucyhbXCJidWxrLXRlc3RzXCJdKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgYmFzZVBhdGg6IHBhdGgucmVsYXRpdmUoZ2V0V29ya3NwYWNlUm9vdCgpLCByZXBvUm9vdCkgfHwgXCIuXCIsXG4gICAgICAgIHRhcmdldDogYXJncy5jb3ZlcmFnZSxcbiAgICAgICAgbWVldHNUaHJlc2hvbGQsXG4gICAgICAgIHRvdGFsczogc3VtbWFyeS50b3RhbHMsXG4gICAgICAgIHdlYWtlc3QsXG4gICAgICAgIGd1aWRhbmNlLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMiksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gc2F0aXNmaWVzIENvbnRlbnRSZXN1bHQ7XG4gICAgfSxcbiAgfTtcblxuZXhwb3J0IGNvbnN0IHJlYWRtZUltcHJvdmVtZW50VG9vbDogVG9vbDxcbiAgdW5kZWZpbmVkLFxuICB0eXBlb2YgcmVhZG1lSW1wcm92ZW1lbnRTY2hlbWFcbj4gPSB7XG4gIG5hbWU6IFwiaW1wcm92ZS1yZWFkbWVcIixcbiAgZGVzY3JpcHRpb246XG4gICAgXCJTdW1tYXJpemUgcmVxdWlyZWQgc3RlcHMgdG8gcmVmcmVzaCBSRUFETUUgYW5kIHdvcmtkb2NzIGNvbnRlbnQgdXNpbmcgLmNvZGV4IGd1aWRhbmNlIGFuZCByZXBvc2l0b3J5IGFuYWx5c2lzLlwiLFxuICBwYXJhbWV0ZXJzOiByZWFkbWVJbXByb3ZlbWVudFNjaGVtYSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIF9jb250ZXh0KTogUHJvbWlzZTxDb250ZW50UmVzdWx0PiA9PiB7XG4gICAgY29uc3QgYXJncyA9IHJlYWRtZUltcHJvdmVtZW50U2NoZW1hLnBhcnNlKGlucHV0IGFzIFJlYWRtZUltcHJvdmVtZW50QXJncyk7XG4gICAgY29uc3QgcmVwb1Jvb3QgPSBhd2FpdCByZXNvbHZlUmVwb1Jvb3QoYXJncy5iYXNlUGF0aCk7XG5cbiAgICBjb25zdCBhbmFseXNpcyA9IGFuYWx5emVSZXBvKHJlcG9Sb290KTtcbiAgICBjb25zdCBtb2R1bGVzID0gYW5hbHlzaXMuZmlsZXNcbiAgICAgIC5maWx0ZXIoKGZpbGUpID0+IC9pbmRleFxcLnRzJC8udGVzdChmaWxlKSlcbiAgICAgIC5tYXAoKGZpbGUpID0+IHBhdGgucmVsYXRpdmUocmVwb1Jvb3QsIGZpbGUpKTtcblxuICAgIGNvbnN0IHByb21wdFNlY3Rpb25zID0gbm9ybWFsaXplUHJvbXB0U2VjdGlvbnMoXG4gICAgICBjb2xsZWN0UHJvbXB0U2VjdGlvbnMoW1widXBkYXRlLXJlYWRtZVwiLCBcImRvY1wiLCBcIm1vZHVsZVwiXSlcbiAgICApO1xuXG4gICAgY29uc3QgdGVzdEV4YW1wbGVzID0gT2JqZWN0LmtleXMoYW5hbHlzaXMudGVzdHMgPz8ge30pO1xuICAgIGNvbnN0IGV4YW1wbGVzID0gYXJncy5pbmNsdWRlRXhhbXBsZXMgPyB0ZXN0RXhhbXBsZXMuc2xpY2UoMCwgMjApIDogW107XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYmFzZVBhdGg6IHBhdGgucmVsYXRpdmUoZ2V0V29ya3NwYWNlUm9vdCgpLCByZXBvUm9vdCkgfHwgXCIuXCIsXG4gICAgICBzdW1tYXJ5OiB7XG4gICAgICAgIG1vZHVsZXMsXG4gICAgICAgIHRvdGFsU291cmNlRmlsZXM6IGFuYWx5c2lzLmZpbGVzLmxlbmd0aCxcbiAgICAgICAgdG90YWxUZXN0RmlsZXM6IGFuYWx5c2lzLnRlc3RGaWxlcy5sZW5ndGgsXG4gICAgICAgIGhhc1JlYWRtZTogQm9vbGVhbihhbmFseXNpcy5yZWFkbWUpLFxuICAgICAgfSxcbiAgICAgIGd1aWRhbmNlOiBwcm9tcHRTZWN0aW9ucyxcbiAgICAgIHN1Z2dlc3RlZEV4YW1wbGVzOiBleGFtcGxlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IHNhdGlzZmllcyBDb250ZW50UmVzdWx0O1xuICB9LFxufTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { Tool } from "fastmcp";
2
+ import { documentObjectSchema, coverageTaskSchema, readmeImprovementSchema } from "../schemas";
3
+ export declare const documentObjectTool: Tool<undefined, typeof documentObjectSchema>;
4
+ export declare const coverageEnforcerTool: Tool<undefined, typeof coverageTaskSchema>;
5
+ export declare const readmeImprovementTool: Tool<undefined, typeof readmeImprovementSchema>;