@planu/cli 0.42.1 → 0.43.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 (232) hide show
  1. package/dist/config/license-plans.json +2 -1
  2. package/dist/engine/actuals/consolidator.d.ts +3 -3
  3. package/dist/engine/actuals/consolidator.d.ts.map +1 -1
  4. package/dist/engine/actuals/consolidator.js +24 -2
  5. package/dist/engine/actuals/consolidator.js.map +1 -1
  6. package/dist/engine/actuals/index.d.ts +1 -0
  7. package/dist/engine/actuals/index.d.ts.map +1 -1
  8. package/dist/engine/actuals/index.js +1 -0
  9. package/dist/engine/actuals/index.js.map +1 -1
  10. package/dist/engine/actuals/progress-parser.d.ts +11 -0
  11. package/dist/engine/actuals/progress-parser.d.ts.map +1 -0
  12. package/dist/engine/actuals/progress-parser.js +84 -0
  13. package/dist/engine/actuals/progress-parser.js.map +1 -0
  14. package/dist/engine/actuals/wip-tracker.d.ts +2 -2
  15. package/dist/engine/actuals/wip-tracker.d.ts.map +1 -1
  16. package/dist/engine/actuals/wip-tracker.js +5 -6
  17. package/dist/engine/actuals/wip-tracker.js.map +1 -1
  18. package/dist/engine/analytics-detector/events.d.ts.map +1 -1
  19. package/dist/engine/analytics-detector/events.js +3 -4
  20. package/dist/engine/analytics-detector/events.js.map +1 -1
  21. package/dist/engine/ci-generator/planu-steps.js +1 -1
  22. package/dist/engine/ci-generator/planu-steps.js.map +1 -1
  23. package/dist/engine/living-spec-analyzer.d.ts +7 -0
  24. package/dist/engine/living-spec-analyzer.d.ts.map +1 -0
  25. package/dist/engine/living-spec-analyzer.js +362 -0
  26. package/dist/engine/living-spec-analyzer.js.map +1 -0
  27. package/dist/engine/plugins/lifecycle.d.ts.map +1 -1
  28. package/dist/engine/plugins/lifecycle.js +3 -4
  29. package/dist/engine/plugins/lifecycle.js.map +1 -1
  30. package/dist/engine/plugins/sandbox.d.ts.map +1 -1
  31. package/dist/engine/plugins/sandbox.js +3 -3
  32. package/dist/engine/plugins/sandbox.js.map +1 -1
  33. package/dist/engine/registry-updater.d.ts.map +1 -1
  34. package/dist/engine/registry-updater.js +3 -3
  35. package/dist/engine/registry-updater.js.map +1 -1
  36. package/dist/engine/source-resolver.d.ts +38 -0
  37. package/dist/engine/source-resolver.d.ts.map +1 -0
  38. package/dist/engine/source-resolver.js +179 -0
  39. package/dist/engine/source-resolver.js.map +1 -0
  40. package/dist/engine/spec-dependency-graph.d.ts +33 -0
  41. package/dist/engine/spec-dependency-graph.d.ts.map +1 -0
  42. package/dist/engine/spec-dependency-graph.js +243 -0
  43. package/dist/engine/spec-dependency-graph.js.map +1 -0
  44. package/dist/i18n/index.d.ts +1 -1
  45. package/dist/i18n/index.d.ts.map +1 -1
  46. package/dist/i18n/index.js +1 -35
  47. package/dist/i18n/index.js.map +1 -1
  48. package/dist/index.js +6 -4
  49. package/dist/index.js.map +1 -1
  50. package/dist/prompts/index.d.ts +6 -0
  51. package/dist/prompts/index.d.ts.map +1 -0
  52. package/dist/prompts/index.js +121 -0
  53. package/dist/prompts/index.js.map +1 -0
  54. package/dist/resources/specs.d.ts.map +1 -1
  55. package/dist/resources/specs.js +11 -6
  56. package/dist/resources/specs.js.map +1 -1
  57. package/dist/storage/checkpoint-store.d.ts.map +1 -1
  58. package/dist/storage/checkpoint-store.js +3 -2
  59. package/dist/storage/checkpoint-store.js.map +1 -1
  60. package/dist/storage/file-mutex.d.ts +14 -0
  61. package/dist/storage/file-mutex.d.ts.map +1 -0
  62. package/dist/storage/file-mutex.js +39 -0
  63. package/dist/storage/file-mutex.js.map +1 -0
  64. package/dist/storage/spec-store.d.ts.map +1 -1
  65. package/dist/storage/spec-store.js +48 -39
  66. package/dist/storage/spec-store.js.map +1 -1
  67. package/dist/tools/activate-license.d.ts.map +1 -1
  68. package/dist/tools/activate-license.js +27 -18
  69. package/dist/tools/activate-license.js.map +1 -1
  70. package/dist/tools/analyze-spec-dependencies.d.ts +6 -0
  71. package/dist/tools/analyze-spec-dependencies.d.ts.map +1 -0
  72. package/dist/tools/analyze-spec-dependencies.js +72 -0
  73. package/dist/tools/analyze-spec-dependencies.js.map +1 -0
  74. package/dist/tools/check-readiness.d.ts.map +1 -1
  75. package/dist/tools/check-readiness.js +8 -0
  76. package/dist/tools/check-readiness.js.map +1 -1
  77. package/dist/tools/configure-llm-providers-handler.d.ts.map +1 -1
  78. package/dist/tools/configure-llm-providers-handler.js +25 -18
  79. package/dist/tools/configure-llm-providers-handler.js.map +1 -1
  80. package/dist/tools/context-budget.d.ts.map +1 -1
  81. package/dist/tools/context-budget.js +41 -14
  82. package/dist/tools/context-budget.js.map +1 -1
  83. package/dist/tools/create-spec/spec-builder.d.ts.map +1 -1
  84. package/dist/tools/create-spec/spec-builder.js +3 -2
  85. package/dist/tools/create-spec/spec-builder.js.map +1 -1
  86. package/dist/tools/delete-project.d.ts.map +1 -1
  87. package/dist/tools/delete-project.js +4 -3
  88. package/dist/tools/delete-project.js.map +1 -1
  89. package/dist/tools/delete-spec.d.ts.map +1 -1
  90. package/dist/tools/delete-spec.js +4 -3
  91. package/dist/tools/delete-spec.js.map +1 -1
  92. package/dist/tools/estimate.d.ts.map +1 -1
  93. package/dist/tools/estimate.js +1 -0
  94. package/dist/tools/estimate.js.map +1 -1
  95. package/dist/tools/event-contracts/handlers.d.ts.map +1 -1
  96. package/dist/tools/event-contracts/handlers.js +5 -7
  97. package/dist/tools/event-contracts/handlers.js.map +1 -1
  98. package/dist/tools/export-spec.js +1 -1
  99. package/dist/tools/export-spec.js.map +1 -1
  100. package/dist/tools/license-status.d.ts.map +1 -1
  101. package/dist/tools/license-status.js +33 -1
  102. package/dist/tools/license-status.js.map +1 -1
  103. package/dist/tools/list-specs.d.ts.map +1 -1
  104. package/dist/tools/list-specs.js +1 -0
  105. package/dist/tools/list-specs.js.map +1 -1
  106. package/dist/tools/llm-provider-status-handler.d.ts.map +1 -1
  107. package/dist/tools/llm-provider-status-handler.js +13 -8
  108. package/dist/tools/llm-provider-status-handler.js.map +1 -1
  109. package/dist/tools/manage-context/store.d.ts.map +1 -1
  110. package/dist/tools/manage-context/store.js +4 -5
  111. package/dist/tools/manage-context/store.js.map +1 -1
  112. package/dist/tools/manage-plugins-handler.d.ts.map +1 -1
  113. package/dist/tools/manage-plugins-handler.js +38 -12
  114. package/dist/tools/manage-plugins-handler.js.map +1 -1
  115. package/dist/tools/manage-trash.d.ts.map +1 -1
  116. package/dist/tools/manage-trash.js +9 -5
  117. package/dist/tools/manage-trash.js.map +1 -1
  118. package/dist/tools/reconcile-spec.d.ts.map +1 -1
  119. package/dist/tools/reconcile-spec.js +11 -1
  120. package/dist/tools/reconcile-spec.js.map +1 -1
  121. package/dist/tools/register-context-tools.d.ts.map +1 -1
  122. package/dist/tools/register-context-tools.js +2 -0
  123. package/dist/tools/register-context-tools.js.map +1 -1
  124. package/dist/tools/register-event-tools.d.ts.map +1 -1
  125. package/dist/tools/register-event-tools.js +1 -0
  126. package/dist/tools/register-event-tools.js.map +1 -1
  127. package/dist/tools/register-export-tools.d.ts.map +1 -1
  128. package/dist/tools/register-export-tools.js +1 -0
  129. package/dist/tools/register-export-tools.js.map +1 -1
  130. package/dist/tools/register-governance-tools.d.ts.map +1 -1
  131. package/dist/tools/register-governance-tools.js +1 -0
  132. package/dist/tools/register-governance-tools.js.map +1 -1
  133. package/dist/tools/register-learning-tools.d.ts.map +1 -1
  134. package/dist/tools/register-learning-tools.js +1 -0
  135. package/dist/tools/register-learning-tools.js.map +1 -1
  136. package/dist/tools/register-license-tools.d.ts.map +1 -1
  137. package/dist/tools/register-license-tools.js +2 -0
  138. package/dist/tools/register-license-tools.js.map +1 -1
  139. package/dist/tools/register-memory-tools.d.ts.map +1 -1
  140. package/dist/tools/register-memory-tools.js +2 -0
  141. package/dist/tools/register-memory-tools.js.map +1 -1
  142. package/dist/tools/register-migration-tools.d.ts.map +1 -1
  143. package/dist/tools/register-migration-tools.js +1 -0
  144. package/dist/tools/register-migration-tools.js.map +1 -1
  145. package/dist/tools/register-platform-tools/design-stack-tools.d.ts.map +1 -1
  146. package/dist/tools/register-platform-tools/design-stack-tools.js +12 -0
  147. package/dist/tools/register-platform-tools/design-stack-tools.js.map +1 -1
  148. package/dist/tools/register-platform-tools/lifecycle-infra-tools.d.ts.map +1 -1
  149. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -0
  150. package/dist/tools/register-platform-tools/lifecycle-infra-tools.js.map +1 -1
  151. package/dist/tools/register-readiness-tools.d.ts.map +1 -1
  152. package/dist/tools/register-readiness-tools.js +2 -0
  153. package/dist/tools/register-readiness-tools.js.map +1 -1
  154. package/dist/tools/register-security-tools.d.ts.map +1 -1
  155. package/dist/tools/register-security-tools.js +1 -0
  156. package/dist/tools/register-security-tools.js.map +1 -1
  157. package/dist/tools/register-spec-tools/analysis-tools.d.ts.map +1 -1
  158. package/dist/tools/register-spec-tools/analysis-tools.js +18 -0
  159. package/dist/tools/register-spec-tools/analysis-tools.js.map +1 -1
  160. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  161. package/dist/tools/register-spec-tools/core-spec-tools.js +4 -1
  162. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  163. package/dist/tools/register-stack-tools.d.ts.map +1 -1
  164. package/dist/tools/register-stack-tools.js +3 -0
  165. package/dist/tools/register-stack-tools.js.map +1 -1
  166. package/dist/tools/safe-handler.d.ts +2 -1
  167. package/dist/tools/safe-handler.d.ts.map +1 -1
  168. package/dist/tools/safe-handler.js +51 -3
  169. package/dist/tools/safe-handler.js.map +1 -1
  170. package/dist/tools/sanitize-path.d.ts +13 -0
  171. package/dist/tools/sanitize-path.d.ts.map +1 -0
  172. package/dist/tools/sanitize-path.js +60 -0
  173. package/dist/tools/sanitize-path.js.map +1 -0
  174. package/dist/tools/schemas/index.d.ts +1 -0
  175. package/dist/tools/schemas/index.d.ts.map +1 -1
  176. package/dist/tools/schemas/index.js +1 -0
  177. package/dist/tools/schemas/index.js.map +1 -1
  178. package/dist/tools/schemas/output-schemas.d.ts +168 -0
  179. package/dist/tools/schemas/output-schemas.d.ts.map +1 -0
  180. package/dist/tools/schemas/output-schemas.js +182 -0
  181. package/dist/tools/schemas/output-schemas.js.map +1 -0
  182. package/dist/tools/schemas/spec.d.ts.map +1 -1
  183. package/dist/tools/schemas/spec.js +9 -1
  184. package/dist/tools/schemas/spec.js.map +1 -1
  185. package/dist/tools/spec-templates.d.ts.map +1 -1
  186. package/dist/tools/spec-templates.js +36 -26
  187. package/dist/tools/spec-templates.js.map +1 -1
  188. package/dist/tools/tool-group-handler.d.ts.map +1 -1
  189. package/dist/tools/tool-group-handler.js +16 -13
  190. package/dist/tools/tool-group-handler.js.map +1 -1
  191. package/dist/tools/tool-registry.d.ts +14 -0
  192. package/dist/tools/tool-registry.d.ts.map +1 -0
  193. package/dist/tools/tool-registry.js +36 -0
  194. package/dist/tools/tool-registry.js.map +1 -0
  195. package/dist/tools/update-status-actions.d.ts +6 -0
  196. package/dist/tools/update-status-actions.d.ts.map +1 -1
  197. package/dist/tools/update-status-actions.js +19 -2
  198. package/dist/tools/update-status-actions.js.map +1 -1
  199. package/dist/tools/update-status.d.ts.map +1 -1
  200. package/dist/tools/update-status.js +6 -1
  201. package/dist/tools/update-status.js.map +1 -1
  202. package/dist/tools/validate.d.ts.map +1 -1
  203. package/dist/tools/validate.js +1 -0
  204. package/dist/tools/validate.js.map +1 -1
  205. package/dist/transports/http-rate-limiter.d.ts +22 -0
  206. package/dist/transports/http-rate-limiter.d.ts.map +1 -0
  207. package/dist/transports/http-rate-limiter.js +42 -0
  208. package/dist/transports/http-rate-limiter.js.map +1 -0
  209. package/dist/transports/http-transport.d.ts.map +1 -1
  210. package/dist/transports/http-transport.js +21 -1
  211. package/dist/transports/http-transport.js.map +1 -1
  212. package/dist/types/actuals-tracking.d.ts +9 -1
  213. package/dist/types/actuals-tracking.d.ts.map +1 -1
  214. package/dist/types/common/primitives.d.ts +1 -0
  215. package/dist/types/common/primitives.d.ts.map +1 -1
  216. package/dist/types/index.d.ts +1 -0
  217. package/dist/types/index.d.ts.map +1 -1
  218. package/dist/types/index.js +1 -0
  219. package/dist/types/index.js.map +1 -1
  220. package/dist/types/source-resolution.d.ts +49 -0
  221. package/dist/types/source-resolution.d.ts.map +1 -0
  222. package/dist/types/source-resolution.js +10 -0
  223. package/dist/types/source-resolution.js.map +1 -0
  224. package/dist/types/spec/core.d.ts +48 -0
  225. package/dist/types/spec/core.d.ts.map +1 -1
  226. package/dist/types/spec/inputs.d.ts +1 -0
  227. package/dist/types/spec/inputs.d.ts.map +1 -1
  228. package/package.json +1 -1
  229. package/src/config/license-plans.json +2 -1
  230. package/src/i18n/messages/en.json +177 -4
  231. package/src/i18n/messages/es.json +177 -4
  232. package/src/i18n/messages/pt.json +177 -4
@@ -0,0 +1,168 @@
1
+ import { z } from 'zod';
2
+ export declare const ListSpecsOutputSchema: {
3
+ projectId: z.ZodString;
4
+ filters: z.ZodObject<{
5
+ status: z.ZodString;
6
+ type: z.ZodString;
7
+ }, z.core.$strip>;
8
+ count: z.ZodNumber;
9
+ totalCount: z.ZodNumber;
10
+ specs: z.ZodArray<z.ZodObject<{
11
+ id: z.ZodString;
12
+ title: z.ZodString;
13
+ type: z.ZodString;
14
+ scope: z.ZodString;
15
+ status: z.ZodString;
16
+ difficulty: z.ZodString;
17
+ risk: z.ZodString;
18
+ target: z.ZodString;
19
+ tags: z.ZodArray<z.ZodString>;
20
+ gitBranch: z.ZodOptional<z.ZodString>;
21
+ estimation: z.ZodObject<{
22
+ devHours: z.ZodNumber;
23
+ totalCostUsd: z.ZodNumber;
24
+ }, z.core.$strip>;
25
+ createdAt: z.ZodString;
26
+ updatedAt: z.ZodString;
27
+ lastModified: z.ZodString;
28
+ }, z.core.$strip>>;
29
+ summary: z.ZodObject<{
30
+ byStatus: z.ZodRecord<z.ZodString, z.ZodNumber>;
31
+ byType: z.ZodRecord<z.ZodString, z.ZodNumber>;
32
+ totalDevHours: z.ZodNumber;
33
+ totalReviewHours: z.ZodNumber;
34
+ totalCostUsd: z.ZodNumber;
35
+ }, z.core.$strip>;
36
+ teamSuggestion: z.ZodNullable<z.ZodObject<{
37
+ recommended: z.ZodBoolean;
38
+ reason: z.ZodString;
39
+ templateId: z.ZodString;
40
+ teamSize: z.ZodNumber;
41
+ specs: z.ZodArray<z.ZodString>;
42
+ toolCalls: z.ZodArray<z.ZodString>;
43
+ }, z.core.$strip>>;
44
+ message: z.ZodString;
45
+ };
46
+ export declare const EstimateOutputSchema: {
47
+ specId: z.ZodString;
48
+ difficulty: z.ZodString;
49
+ confidence: z.ZodString;
50
+ estimation: z.ZodObject<{
51
+ devHours: z.ZodNumber;
52
+ reviewHours: z.ZodNumber;
53
+ totalHours: z.ZodNumber;
54
+ recommendedModel: z.ZodString;
55
+ tokensOpus: z.ZodNumber;
56
+ tokensSonnet: z.ZodNumber;
57
+ apiCostUsd: z.ZodNumber;
58
+ humanCostUsd: z.ZodNumber;
59
+ totalCostUsd: z.ZodNumber;
60
+ tokenOptimization: z.ZodObject<{
61
+ estimatedSavings: z.ZodNumber;
62
+ suggestions: z.ZodArray<z.ZodString>;
63
+ }, z.core.$strip>;
64
+ }, z.core.$strip>;
65
+ tokenStrategy: z.ZodObject<{
66
+ operationMode: z.ZodString;
67
+ suggestedAiModel: z.ZodString;
68
+ modelRationale: z.ZodString;
69
+ }, z.core.$strip>;
70
+ reasoning: z.ZodArray<z.ZodString>;
71
+ similarSpecs: z.ZodArray<z.ZodObject<{
72
+ specId: z.ZodString;
73
+ similarity: z.ZodNumber;
74
+ }, z.core.$strip>>;
75
+ historyUsed: z.ZodBoolean;
76
+ };
77
+ export declare const ValidateOutputSchema: {
78
+ specId: z.ZodString;
79
+ title: z.ZodString;
80
+ score: z.ZodNumber;
81
+ fieldsImplemented: z.ZodNumber;
82
+ fieldsTotal: z.ZodNumber;
83
+ matches: z.ZodArray<z.ZodString>;
84
+ missing: z.ZodArray<z.ZodString>;
85
+ extra: z.ZodArray<z.ZodString>;
86
+ qualityIssues: z.ZodArray<z.ZodObject<{
87
+ file: z.ZodString;
88
+ line: z.ZodNumber;
89
+ severity: z.ZodString;
90
+ rule: z.ZodString;
91
+ message: z.ZodString;
92
+ suggestion: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>>;
94
+ implementationQualityScore: z.ZodObject<{
95
+ overall: z.ZodNumber;
96
+ gradeLetter: z.ZodString;
97
+ filesAudited: z.ZodNumber;
98
+ categories: z.ZodArray<z.ZodObject<{
99
+ category: z.ZodString;
100
+ score: z.ZodNumber;
101
+ weight: z.ZodNumber;
102
+ issueCount: z.ZodNumber;
103
+ worstSeverity: z.ZodString;
104
+ }, z.core.$strip>>;
105
+ }, z.core.$strip>;
106
+ definitionOfReady: z.ZodObject<{
107
+ isReady: z.ZodBoolean;
108
+ passed: z.ZodNumber;
109
+ required: z.ZodNumber;
110
+ items: z.ZodArray<z.ZodObject<{
111
+ id: z.ZodString;
112
+ description: z.ZodString;
113
+ status: z.ZodString;
114
+ }, z.core.$strip>>;
115
+ }, z.core.$strip>;
116
+ definitionOfDone: z.ZodObject<{
117
+ isDone: z.ZodBoolean;
118
+ passed: z.ZodNumber;
119
+ required: z.ZodNumber;
120
+ items: z.ZodArray<z.ZodObject<{
121
+ id: z.ZodString;
122
+ description: z.ZodString;
123
+ status: z.ZodString;
124
+ }, z.core.$strip>>;
125
+ }, z.core.$strip>;
126
+ suggestions: z.ZodOptional<z.ZodArray<z.ZodString>>;
127
+ };
128
+ export declare const CheckReadinessOutputSchema: {
129
+ specId: z.ZodString;
130
+ score: z.ZodNumber;
131
+ ready: z.ZodBoolean;
132
+ mode: z.ZodString;
133
+ issues: z.ZodObject<{
134
+ blockers: z.ZodArray<z.ZodString>;
135
+ warnings: z.ZodArray<z.ZodString>;
136
+ breakdown: z.ZodObject<{
137
+ hu: z.ZodOptional<z.ZodNumber>;
138
+ criteria: z.ZodOptional<z.ZodNumber>;
139
+ files: z.ZodOptional<z.ZodNumber>;
140
+ dependencies: z.ZodOptional<z.ZodNumber>;
141
+ }, z.core.$strip>;
142
+ }, z.core.$strip>;
143
+ recommendations: z.ZodArray<z.ZodString>;
144
+ };
145
+ export declare const LicenseStatusOutputSchema: {
146
+ version: z.ZodString;
147
+ plan: z.ZodString;
148
+ toolsAvailable: z.ZodNumber;
149
+ toolsTotal: z.ZodNumber;
150
+ limits: z.ZodObject<{
151
+ maxProjects: z.ZodNumber;
152
+ currentProjects: z.ZodNumber;
153
+ maxActiveSpecs: z.ZodNumber;
154
+ }, z.core.$strip>;
155
+ customer: z.ZodOptional<z.ZodObject<{
156
+ name: z.ZodString;
157
+ email: z.ZodString;
158
+ variant: z.ZodString;
159
+ activatedAt: z.ZodString;
160
+ lastValidatedAt: z.ZodString;
161
+ }, z.core.$strip>>;
162
+ activationSlots: z.ZodOptional<z.ZodObject<{
163
+ used: z.ZodNumber;
164
+ total: z.ZodNumber;
165
+ }, z.core.$strip>>;
166
+ upgradeUrl: z.ZodOptional<z.ZodString>;
167
+ };
168
+ //# sourceMappingURL=output-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/output-schemas.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CjC,CAAC;AAIF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgChC,CAAC;AAIF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DhC,CAAC;AAIF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;CAgBtC,CAAC;AAIF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;CA0BrC,CAAC"}
@@ -0,0 +1,182 @@
1
+ // schemas/output-schemas.ts — Zod output schemas for MCP tools with structured output.
2
+ // Used with registerTool({ outputSchema }) to declare tool output structure.
3
+ // See: https://spec.modelcontextprotocol.io/specification/draft/server/tools/#structured-content
4
+ import { z } from 'zod';
5
+ // ── list_specs ──────────────────────────────────────────────────────────────
6
+ export const ListSpecsOutputSchema = {
7
+ projectId: z.string(),
8
+ filters: z.object({
9
+ status: z.string(),
10
+ type: z.string(),
11
+ }),
12
+ count: z.number(),
13
+ totalCount: z.number(),
14
+ specs: z.array(z.object({
15
+ id: z.string(),
16
+ title: z.string(),
17
+ type: z.string(),
18
+ scope: z.string(),
19
+ status: z.string(),
20
+ difficulty: z.string(),
21
+ risk: z.string(),
22
+ target: z.string(),
23
+ tags: z.array(z.string()),
24
+ gitBranch: z.string().optional(),
25
+ estimation: z.object({
26
+ devHours: z.number(),
27
+ totalCostUsd: z.number(),
28
+ }),
29
+ createdAt: z.string(),
30
+ updatedAt: z.string(),
31
+ lastModified: z.string(),
32
+ })),
33
+ summary: z.object({
34
+ byStatus: z.record(z.string(), z.number()),
35
+ byType: z.record(z.string(), z.number()),
36
+ totalDevHours: z.number(),
37
+ totalReviewHours: z.number(),
38
+ totalCostUsd: z.number(),
39
+ }),
40
+ teamSuggestion: z
41
+ .object({
42
+ recommended: z.boolean(),
43
+ reason: z.string(),
44
+ templateId: z.string(),
45
+ teamSize: z.number(),
46
+ specs: z.array(z.string()),
47
+ toolCalls: z.array(z.string()),
48
+ })
49
+ .nullable(),
50
+ message: z.string(),
51
+ };
52
+ // ── estimate ────────────────────────────────────────────────────────────────
53
+ export const EstimateOutputSchema = {
54
+ specId: z.string(),
55
+ difficulty: z.string(),
56
+ confidence: z.string(),
57
+ estimation: z.object({
58
+ devHours: z.number(),
59
+ reviewHours: z.number(),
60
+ totalHours: z.number(),
61
+ recommendedModel: z.string(),
62
+ tokensOpus: z.number(),
63
+ tokensSonnet: z.number(),
64
+ apiCostUsd: z.number(),
65
+ humanCostUsd: z.number(),
66
+ totalCostUsd: z.number(),
67
+ tokenOptimization: z.object({
68
+ estimatedSavings: z.number(),
69
+ suggestions: z.array(z.string()),
70
+ }),
71
+ }),
72
+ tokenStrategy: z.object({
73
+ operationMode: z.string(),
74
+ suggestedAiModel: z.string(),
75
+ modelRationale: z.string(),
76
+ }),
77
+ reasoning: z.array(z.string()),
78
+ similarSpecs: z.array(z.object({
79
+ specId: z.string(),
80
+ similarity: z.number(),
81
+ })),
82
+ historyUsed: z.boolean(),
83
+ };
84
+ // ── validate ────────────────────────────────────────────────────────────────
85
+ export const ValidateOutputSchema = {
86
+ specId: z.string(),
87
+ title: z.string(),
88
+ score: z.number(),
89
+ fieldsImplemented: z.number(),
90
+ fieldsTotal: z.number(),
91
+ matches: z.array(z.string()),
92
+ missing: z.array(z.string()),
93
+ extra: z.array(z.string()),
94
+ qualityIssues: z.array(z.object({
95
+ file: z.string(),
96
+ line: z.number(),
97
+ severity: z.string(),
98
+ rule: z.string(),
99
+ message: z.string(),
100
+ suggestion: z.string().optional(),
101
+ })),
102
+ implementationQualityScore: z.object({
103
+ overall: z.number(),
104
+ gradeLetter: z.string(),
105
+ filesAudited: z.number(),
106
+ categories: z.array(z.object({
107
+ category: z.string(),
108
+ score: z.number(),
109
+ weight: z.number(),
110
+ issueCount: z.number(),
111
+ worstSeverity: z.string(),
112
+ })),
113
+ }),
114
+ definitionOfReady: z.object({
115
+ isReady: z.boolean(),
116
+ passed: z.number(),
117
+ required: z.number(),
118
+ items: z.array(z.object({
119
+ id: z.string(),
120
+ description: z.string(),
121
+ status: z.string(),
122
+ })),
123
+ }),
124
+ definitionOfDone: z.object({
125
+ isDone: z.boolean(),
126
+ passed: z.number(),
127
+ required: z.number(),
128
+ items: z.array(z.object({
129
+ id: z.string(),
130
+ description: z.string(),
131
+ status: z.string(),
132
+ })),
133
+ }),
134
+ suggestions: z.array(z.string()).optional(),
135
+ };
136
+ // ── check_readiness ─────────────────────────────────────────────────────────
137
+ export const CheckReadinessOutputSchema = {
138
+ specId: z.string(),
139
+ score: z.number(),
140
+ ready: z.boolean(),
141
+ mode: z.string(),
142
+ issues: z.object({
143
+ blockers: z.array(z.string()),
144
+ warnings: z.array(z.string()),
145
+ breakdown: z.object({
146
+ hu: z.number().optional(),
147
+ criteria: z.number().optional(),
148
+ files: z.number().optional(),
149
+ dependencies: z.number().optional(),
150
+ }),
151
+ }),
152
+ recommendations: z.array(z.string()),
153
+ };
154
+ // ── license_status ──────────────────────────────────────────────────────────
155
+ export const LicenseStatusOutputSchema = {
156
+ version: z.string(),
157
+ plan: z.string(),
158
+ toolsAvailable: z.number(),
159
+ toolsTotal: z.number(),
160
+ limits: z.object({
161
+ maxProjects: z.number(),
162
+ currentProjects: z.number(),
163
+ maxActiveSpecs: z.number(),
164
+ }),
165
+ customer: z
166
+ .object({
167
+ name: z.string(),
168
+ email: z.string(),
169
+ variant: z.string(),
170
+ activatedAt: z.string(),
171
+ lastValidatedAt: z.string(),
172
+ })
173
+ .optional(),
174
+ activationSlots: z
175
+ .object({
176
+ used: z.number(),
177
+ total: z.number(),
178
+ })
179
+ .optional(),
180
+ upgradeUrl: z.string().optional(),
181
+ };
182
+ //# sourceMappingURL=output-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-schemas.js","sourceRoot":"","sources":["../../../src/tools/schemas/output-schemas.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,6EAA6E;AAC7E,iGAAiG;AAEjG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;SACzB,CAAC;QACF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;KACzB,CAAC,CACH;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;KACzB,CAAC;IACF,cAAc,EAAE,CAAC;SACd,MAAM,CAAC;QACN,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/B,CAAC;SACD,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC1B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;YAC5B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjC,CAAC;KACH,CAAC;IACF,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC5B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;KAC3B,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,CAAC,CAAC,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CACH;IACD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;CACzB,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,KAAK,CACpB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC,CACH;IACD,0BAA0B,EAAE,CAAC,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;SAC1B,CAAC,CACH;KACF,CAAC;IACF,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC,CACH;KACF,CAAC;IACF,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;YACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;YACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC,CACH;KACF,CAAC;IACF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACpC,CAAC;KACH,CAAC;IACF,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;KAC3B,CAAC;IACF,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;KAC5B,CAAC;SACD,QAAQ,EAAE;IACb,eAAe,EAAE,CAAC;SACf,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;EAA+D,CAAC;AAChG,eAAO,MAAM,cAAc;;;;;;EAEgD,CAAC;AAE5E,eAAO,MAAM,YAAY;;;;;;;;;EAEyE,CAAC;AACnG,eAAO,MAAM,aAAa;;;;;EAEiD,CAAC;AAC5E,eAAO,MAAM,cAAc;;;;;;;;;EAaxB,CAAC;AACJ,eAAO,MAAM,mBAAmB;;;;EAEkC,CAAC"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../src/tools/schemas/spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;EAA+D,CAAC;AAChG,eAAO,MAAM,cAAc;;;;;;EAEgD,CAAC;AAE5E,eAAO,MAAM,YAAY;;;;;;;;;EAYtB,CAAC;AACJ,eAAO,MAAM,aAAa;;;;;EAEiD,CAAC;AAC5E,eAAO,MAAM,cAAc;;;;;;;;;EAaxB,CAAC;AACJ,eAAO,MAAM,mBAAmB;;;;EAEkC,CAAC"}
@@ -7,7 +7,15 @@ export const SpecStatusEnum = z
7
7
  // SPEC-016a: added 'agent'; SPEC-027: added 'tech-debt'
8
8
  export const SpecTypeEnum = z
9
9
  .enum(['feature', 'refactor', 'bugfix', 'infra', 'docs', 'project', 'agent', 'tech-debt'])
10
- .describe('Spec type: feature | refactor | bugfix | infra | docs | project | agent | tech-debt');
10
+ .describe('Spec type: ' +
11
+ 'feature (new functionality or capability) | ' +
12
+ 'refactor (restructure existing code without changing behavior) | ' +
13
+ 'bugfix (fix a defect or incorrect behavior) | ' +
14
+ 'infra (infrastructure, CI/CD, build, deployment changes) | ' +
15
+ 'docs (documentation-only changes) | ' +
16
+ 'project (cross-cutting project-wide initiative) | ' +
17
+ 'agent (AI agent or automation workflow) | ' +
18
+ 'tech-debt (address accumulated technical debt)');
11
19
  export const SpecScopeEnum = z
12
20
  .enum(['trivial', 'feature', 'cross-module', 'architectural'])
13
21
  .describe('Spec scope: trivial | feature | cross-module | architectural');
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/tools/schemas/spec.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KAC7D,QAAQ,CAAC,8DAA8D,CAAC,CAAC;AAC5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACzF,QAAQ,CAAC,qFAAqF,CAAC,CAAC;AACnG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;KAC7D,QAAQ,CAAC,8DAA8D,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC;IACJ,UAAU;IACV,SAAS;IACT,QAAQ;IACR,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,KAAK;IACL,SAAS;CACV,CAAC;KACD,QAAQ,CACP,kGAAkG,CACnG,CAAC;AACJ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;KAC5C,QAAQ,CAAC,qDAAqD,CAAC,CAAC"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/tools/schemas/spec.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KAC7D,QAAQ,CAAC,8DAA8D,CAAC,CAAC;AAC5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KACzF,QAAQ,CACP,aAAa;IACX,8CAA8C;IAC9C,mEAAmE;IACnE,gDAAgD;IAChD,6DAA6D;IAC7D,sCAAsC;IACtC,oDAAoD;IACpD,4CAA4C;IAC5C,gDAAgD,CACnD,CAAC;AACJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;KAC7D,QAAQ,CAAC,8DAA8D,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,IAAI,CAAC;IACJ,UAAU;IACV,SAAS;IACT,QAAQ;IACR,WAAW;IACX,gBAAgB;IAChB,UAAU;IACV,KAAK;IACL,SAAS;CACV,CAAC;KACD,QAAQ,CACP,kGAAkG,CACnG,CAAC;AACJ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,IAAI,CAAC,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;KAC5C,QAAQ,CAAC,qDAAqD,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spec-templates.d.ts","sourceRoot":"","sources":["../../src/tools/spec-templates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAElB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0DvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkEvF"}
1
+ {"version":3,"file":"spec-templates.d.ts","sourceRoot":"","sources":["../../src/tools/spec-templates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAElB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiEvF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkEvF"}
@@ -2,43 +2,51 @@
2
2
  import { mkdir, writeFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
4
  import { listTemplates, findTemplateWithCustom, renderTemplate, findMissingRequired, } from '../engine/spec-templates/index.js';
5
+ import { t, ti } from '../i18n/index.js';
5
6
  /**
6
7
  * Returns the list of available spec templates, optionally filtered.
7
8
  */
8
9
  export async function handleListTemplates(args) {
9
10
  try {
10
11
  const { result, warnings } = await listTemplates(args.category, args.search, args.complexityScore);
12
+ const filterText = result.filteredBy !== undefined
13
+ ? ` (${ti('tools.spec_templates.filteredBy', { filter: result.filteredBy })})`
14
+ : '';
11
15
  const lines = [
12
- '# Available Spec Templates',
16
+ `# ${t('tools.spec_templates.listTitle')}`,
13
17
  '',
14
- `Found **${result.total}** template${result.total === 1 ? '' : 's'}${result.filteredBy !== undefined ? ` (filtered by: ${result.filteredBy})` : ''}.`,
18
+ ti('tools.spec_templates.found', {
19
+ count: String(result.total),
20
+ plural: result.total === 1 ? '' : 's',
21
+ filter: filterText,
22
+ }),
15
23
  '',
16
24
  ];
17
25
  if (result.templates.length === 0) {
18
- lines.push('No templates match the given filters. Try removing filters to see all templates.');
26
+ lines.push(t('tools.spec_templates.noMatch'));
19
27
  }
20
28
  else {
21
- for (const t of result.templates) {
22
- lines.push(`## ${t.name} (\`${t.id}\`)`);
23
- lines.push(`- **Category:** ${t.category}${t.subcategory !== undefined ? ` (${t.subcategory})` : ''}`);
24
- lines.push(`- **Complexity:** ${t.complexityScore}`);
25
- lines.push(`- **Criteria:** ${t.criteriaCount}`);
26
- lines.push(`- **Description:** ${t.description}`);
27
- lines.push(`- **Tags:** ${t.tags.join(', ')}`);
28
- lines.push(`- **Variables:** ${t.variableCount} total, ${t.requiredVariableCount} required`);
29
+ for (const tpl of result.templates) {
30
+ lines.push(`## ${tpl.name} (\`${tpl.id}\`)`);
31
+ lines.push(`- **${t('tools.spec_templates.category')}** ${tpl.category}${tpl.subcategory !== undefined ? ` (${tpl.subcategory})` : ''}`);
32
+ lines.push(`- **${t('tools.spec_templates.complexity')}** ${tpl.complexityScore}`);
33
+ lines.push(`- **${t('tools.spec_templates.criteria')}** ${tpl.criteriaCount}`);
34
+ lines.push(`- **${t('tools.spec_templates.templateDescription')}** ${tpl.description}`);
35
+ lines.push(`- **${t('tools.spec_templates.tags')}** ${tpl.tags.join(', ')}`);
36
+ lines.push(`- **${t('tools.spec_templates.variables')}** ${ti('tools.spec_templates.variablesDetail', { total: String(tpl.variableCount), required: String(tpl.requiredVariableCount) })}`);
29
37
  lines.push('');
30
38
  }
31
39
  }
32
40
  if (warnings.length > 0) {
33
- lines.push('### Custom Template Warnings');
41
+ lines.push(`### ${t('tools.spec_templates.customWarnings')}`);
34
42
  for (const w of warnings) {
35
43
  lines.push(`- **${w.file}**: ${w.error}`);
36
44
  }
37
45
  lines.push('');
38
46
  }
39
47
  lines.push('---');
40
- lines.push('Use `apply_template` with a template `id` to create a spec from a template.');
41
- lines.push('Custom templates: place JSON files in `data/global/spec-templates/custom/`.');
48
+ lines.push(t('tools.spec_templates.useApply'));
49
+ lines.push(t('tools.spec_templates.customLocation'));
42
50
  return {
43
51
  content: [{ type: 'text', text: lines.join('\n') }],
44
52
  };
@@ -46,7 +54,7 @@ export async function handleListTemplates(args) {
46
54
  catch (error) {
47
55
  const message = error instanceof Error ? error.message : String(error);
48
56
  return {
49
- content: [{ type: 'text', text: `Error listing templates: ${message}` }],
57
+ content: [{ type: 'text', text: ti('tools.spec_templates.listError', { message }) }],
50
58
  isError: true,
51
59
  };
52
60
  }
@@ -62,7 +70,7 @@ export async function handleApplyTemplate(args) {
62
70
  content: [
63
71
  {
64
72
  type: 'text',
65
- text: `Template not found: "${args.templateId}". Use list_templates to see available templates.`,
73
+ text: ti('tools.spec_templates.templateNotFound', { id: args.templateId }),
66
74
  },
67
75
  ],
68
76
  isError: true,
@@ -110,7 +118,7 @@ export async function handleApplyTemplate(args) {
110
118
  catch (error) {
111
119
  const message = error instanceof Error ? error.message : String(error);
112
120
  return {
113
- content: [{ type: 'text', text: `Error applying template: ${message}` }],
121
+ content: [{ type: 'text', text: ti('tools.spec_templates.applyError', { message }) }],
114
122
  isError: true,
115
123
  };
116
124
  }
@@ -139,30 +147,32 @@ function slugify(text) {
139
147
  * Builds a user-friendly error message for missing required variables.
140
148
  */
141
149
  function buildMissingVariablesMessage(missingKeys, definitions) {
142
- const lines = ['Missing required template variables:', ''];
150
+ const lines = [t('tools.spec_templates.missingVarsTitle'), ''];
143
151
  for (const key of missingKeys) {
144
152
  const def = definitions.find((d) => d.key === key);
145
153
  if (def !== undefined) {
146
154
  lines.push(`- **${def.label}** (key: \`${key}\`): ${def.description}`);
147
- lines.push(` Example: "${def.example}"`);
155
+ lines.push(` ${ti('tools.spec_templates.missingVarExample', { example: def.example })}`);
148
156
  }
149
157
  else {
150
158
  lines.push(`- \`${key}\``);
151
159
  }
152
160
  }
153
161
  lines.push('');
154
- lines.push('Provide all required variables in the `variables` array and try again.');
162
+ lines.push(t('tools.spec_templates.missingVarsHint'));
155
163
  return lines.join('\n');
156
164
  }
157
165
  /**
158
166
  * Builds the success message after a template is applied.
159
167
  */
160
168
  function buildSuccessMessage(templateName, outputDir) {
161
- return (`Template "${templateName}" applied successfully.\n` +
162
- `Files created in: ${outputDir}\n` +
163
- 'Next steps:\n' +
164
- '1. Review and customize HU.md acceptance criteria\n' +
165
- '2. Update FICHA-TECNICA.md with project-specific details\n' +
166
- '3. Run create_spec or update_status once the spec is approved');
169
+ return [
170
+ ti('tools.spec_templates.applySuccess', { name: templateName }),
171
+ ti('tools.spec_templates.filesCreated', { dir: outputDir }),
172
+ t('tools.spec_templates.nextSteps'),
173
+ t('tools.spec_templates.step1'),
174
+ t('tools.spec_templates.step2'),
175
+ t('tools.spec_templates.step3'),
176
+ ].join('\n');
167
177
  }
168
178
  //# sourceMappingURL=spec-templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-templates.js","sourceRoot":"","sources":["../../src/tools/spec-templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-templates.js","sourceRoot":"","sources":["../../src/tools/spec-templates.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-group-handler.d.ts","sourceRoot":"","sources":["../../src/tools/tool-group-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAM3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE3D;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACzC,GAAG,OAAO,CAAC,UAAU,CAAC,CAmDtB;AAGD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CA6B5D"}
1
+ {"version":3,"file":"tool-group-handler.d.ts","sourceRoot":"","sources":["../../src/tools/tool-group-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAO3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAE3D;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACzC,GAAG,OAAO,CAAC,UAAU,CAAC,CAyDtB;AAGD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CA2B5D"}
@@ -1,4 +1,5 @@
1
1
  // tools/tool-group-handler.ts — Handlers for tool group management (SPEC-074)
2
+ import { t, ti } from '../i18n/index.js';
2
3
  import { analyzeContext } from '../engine/tool-groups/context-analyzer.js';
3
4
  // Singleton reference set from register-tool-groups.ts
4
5
  let groupManager = null;
@@ -9,9 +10,7 @@ export function setGroupManager(manager) {
9
10
  export async function handleActivateGroup(args) {
10
11
  if (!groupManager) {
11
12
  return {
12
- content: [
13
- { type: 'text', text: 'Error: Tool groups not initialized. Call init_project first.' },
14
- ],
13
+ content: [{ type: 'text', text: t('tools.tool_groups.notInitialized') }],
15
14
  isError: true,
16
15
  };
17
16
  }
@@ -32,17 +31,23 @@ export async function handleActivateGroup(args) {
32
31
  const enabledGroups = new Set(result.allGroups.filter((g) => g.enabled).map((g) => g.id));
33
32
  const suggestions = analyzeContext(args.group, enabledGroups);
34
33
  const lines = [
35
- `Group "${args.group}" ${result.newState ? 'enabled' : 'disabled'} successfully.`,
34
+ ti('tools.tool_groups.groupToggled', {
35
+ group: args.group,
36
+ state: result.newState ? 'enabled' : 'disabled',
37
+ }),
36
38
  '',
37
- `Active tools: ${String(result.totalActiveTools)}/${String(result.totalTools)}`,
39
+ ti('tools.tool_groups.activeTools', {
40
+ active: String(result.totalActiveTools),
41
+ total: String(result.totalTools),
42
+ }),
38
43
  '',
39
- '## Group Status',
44
+ t('tools.tool_groups.groupStatusHeading'),
40
45
  ...result.allGroups.map((g) => `- ${g.enabled ? '✅' : '⬜'} **${g.name}** (${String(g.toolCount)} tools)`),
41
46
  ];
42
47
  if (suggestions.length > 0) {
43
- lines.push('', '## Suggestions');
48
+ lines.push('', t('tools.tool_groups.suggestionsHeading'));
44
49
  for (const s of suggestions) {
45
- lines.push(`- Consider activating **${s.suggestedGroup}**: ${s.reason}`);
50
+ lines.push(`- ${ti('tools.tool_groups.suggestActivating', { group: s.suggestedGroup, reason: s.reason })}`);
46
51
  }
47
52
  }
48
53
  return { content: [{ type: 'text', text: lines.join('\n') }] };
@@ -56,9 +61,7 @@ export async function handleActivateGroup(args) {
56
61
  export async function handleListGroups() {
57
62
  if (!groupManager) {
58
63
  return {
59
- content: [
60
- { type: 'text', text: 'Error: Tool groups not initialized. Call init_project first.' },
61
- ],
64
+ content: [{ type: 'text', text: t('tools.tool_groups.notInitialized') }],
62
65
  isError: true,
63
66
  };
64
67
  }
@@ -66,7 +69,7 @@ export async function handleListGroups() {
66
69
  const activeCount = groupManager.getActiveToolCount();
67
70
  const totalCount = groupManager.getTotalToolCount();
68
71
  const lines = [
69
- `# Tool Groups (${String(activeCount)}/${String(totalCount)} tools active)`,
72
+ ti('tools.tool_groups.listHeading', { active: String(activeCount), total: String(totalCount) }),
70
73
  '',
71
74
  ];
72
75
  for (const g of groups) {
@@ -74,7 +77,7 @@ export async function handleListGroups() {
74
77
  lines.push(`## ${icon} ${g.name} (${String(g.toolCount)} tools)`);
75
78
  lines.push(g.description);
76
79
  lines.push('');
77
- lines.push(`Tools: ${g.tools.join(', ')}`);
80
+ lines.push(ti('tools.tool_groups.toolsLabel', { tools: g.tools.join(', ') }));
78
81
  lines.push('');
79
82
  }
80
83
  return { content: [{ type: 'text', text: lines.join('\n') }] };