@prd-improve/cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +38 -0
  2. package/dist/anchor-slicer.d.ts +18 -0
  3. package/dist/anchor-slicer.js +114 -0
  4. package/dist/anchor-slicer.js.map +1 -0
  5. package/dist/api/client.d.ts +68 -0
  6. package/dist/api/client.js +175 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/changelog.d.ts +9 -0
  9. package/dist/changelog.js +34 -0
  10. package/dist/changelog.js.map +1 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +258 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/admin/_adminJson.d.ts +18 -0
  15. package/dist/commands/admin/_adminJson.js +27 -0
  16. package/dist/commands/admin/_adminJson.js.map +1 -0
  17. package/dist/commands/admin/_authResolve.d.ts +8 -0
  18. package/dist/commands/admin/_authResolve.js +56 -0
  19. package/dist/commands/admin/_authResolve.js.map +1 -0
  20. package/dist/commands/admin/index.d.ts +22 -0
  21. package/dist/commands/admin/index.js +100 -0
  22. package/dist/commands/admin/index.js.map +1 -0
  23. package/dist/commands/admin/io.d.ts +15 -0
  24. package/dist/commands/admin/io.js +30 -0
  25. package/dist/commands/admin/io.js.map +1 -0
  26. package/dist/commands/admin/member.d.ts +43 -0
  27. package/dist/commands/admin/member.js +362 -0
  28. package/dist/commands/admin/member.js.map +1 -0
  29. package/dist/commands/admin/project.d.ts +40 -0
  30. package/dist/commands/admin/project.js +182 -0
  31. package/dist/commands/admin/project.js.map +1 -0
  32. package/dist/commands/admin/team.d.ts +31 -0
  33. package/dist/commands/admin/team.js +157 -0
  34. package/dist/commands/admin/team.js.map +1 -0
  35. package/dist/commands/admin/teamMember.d.ts +33 -0
  36. package/dist/commands/admin/teamMember.js +262 -0
  37. package/dist/commands/admin/teamMember.js.map +1 -0
  38. package/dist/commands/admin/token.d.ts +29 -0
  39. package/dist/commands/admin/token.js +125 -0
  40. package/dist/commands/admin/token.js.map +1 -0
  41. package/dist/commands/admin/user.d.ts +2 -0
  42. package/dist/commands/admin/user.js +85 -0
  43. package/dist/commands/admin/user.js.map +1 -0
  44. package/dist/commands/config.d.ts +9 -0
  45. package/dist/commands/config.js +178 -0
  46. package/dist/commands/config.js.map +1 -0
  47. package/dist/commands/context.d.ts +11 -0
  48. package/dist/commands/context.js +235 -0
  49. package/dist/commands/context.js.map +1 -0
  50. package/dist/commands/diff.d.ts +6 -0
  51. package/dist/commands/diff.js +208 -0
  52. package/dist/commands/diff.js.map +1 -0
  53. package/dist/commands/freeze.d.ts +10 -0
  54. package/dist/commands/freeze.js +269 -0
  55. package/dist/commands/freeze.js.map +1 -0
  56. package/dist/commands/init.d.ts +24 -0
  57. package/dist/commands/init.js +229 -0
  58. package/dist/commands/init.js.map +1 -0
  59. package/dist/commands/login.d.ts +26 -0
  60. package/dist/commands/login.js +241 -0
  61. package/dist/commands/login.js.map +1 -0
  62. package/dist/commands/logout.d.ts +6 -0
  63. package/dist/commands/logout.js +75 -0
  64. package/dist/commands/logout.js.map +1 -0
  65. package/dist/commands/migrate-yaml.d.ts +17 -0
  66. package/dist/commands/migrate-yaml.js +288 -0
  67. package/dist/commands/migrate-yaml.js.map +1 -0
  68. package/dist/commands/project.d.ts +7 -0
  69. package/dist/commands/project.js +87 -0
  70. package/dist/commands/project.js.map +1 -0
  71. package/dist/commands/pull.d.ts +16 -0
  72. package/dist/commands/pull.js +197 -0
  73. package/dist/commands/pull.js.map +1 -0
  74. package/dist/commands/push.d.ts +9 -0
  75. package/dist/commands/push.js +392 -0
  76. package/dist/commands/push.js.map +1 -0
  77. package/dist/commands/refresh.d.ts +9 -0
  78. package/dist/commands/refresh.js +123 -0
  79. package/dist/commands/refresh.js.map +1 -0
  80. package/dist/commands/status.d.ts +7 -0
  81. package/dist/commands/status.js +190 -0
  82. package/dist/commands/status.js.map +1 -0
  83. package/dist/commands/team.d.ts +6 -0
  84. package/dist/commands/team.js +84 -0
  85. package/dist/commands/team.js.map +1 -0
  86. package/dist/commands/validate.d.ts +5 -0
  87. package/dist/commands/validate.js +129 -0
  88. package/dist/commands/validate.js.map +1 -0
  89. package/dist/commands/whoami.d.ts +6 -0
  90. package/dist/commands/whoami.js +81 -0
  91. package/dist/commands/whoami.js.map +1 -0
  92. package/dist/config/adminBackend.d.ts +43 -0
  93. package/dist/config/adminBackend.js +33 -0
  94. package/dist/config/adminBackend.js.map +1 -0
  95. package/dist/config/rc.d.ts +70 -0
  96. package/dist/config/rc.js +148 -0
  97. package/dist/config/rc.js.map +1 -0
  98. package/dist/config/schema.d.ts +132 -0
  99. package/dist/config/schema.js +36 -0
  100. package/dist/config/schema.js.map +1 -0
  101. package/dist/diff/engine.d.ts +35 -0
  102. package/dist/diff/engine.js +305 -0
  103. package/dist/diff/engine.js.map +1 -0
  104. package/dist/diff/render.d.ts +18 -0
  105. package/dist/diff/render.js +129 -0
  106. package/dist/diff/render.js.map +1 -0
  107. package/dist/formatter/colors.d.ts +17 -0
  108. package/dist/formatter/colors.js +35 -0
  109. package/dist/formatter/colors.js.map +1 -0
  110. package/dist/formatter/human.d.ts +7 -0
  111. package/dist/formatter/human.js +70 -0
  112. package/dist/formatter/human.js.map +1 -0
  113. package/dist/fs/atomicWrite.d.ts +7 -0
  114. package/dist/fs/atomicWrite.js +37 -0
  115. package/dist/fs/atomicWrite.js.map +1 -0
  116. package/dist/i18n/dispatch.d.ts +19 -0
  117. package/dist/i18n/dispatch.js +27 -0
  118. package/dist/i18n/dispatch.js.map +1 -0
  119. package/dist/i18n/en.d.ts +3 -0
  120. package/dist/i18n/en.js +275 -0
  121. package/dist/i18n/en.js.map +1 -0
  122. package/dist/i18n/help.d.ts +3 -0
  123. package/dist/i18n/help.en.d.ts +149 -0
  124. package/dist/i18n/help.en.js +150 -0
  125. package/dist/i18n/help.en.js.map +1 -0
  126. package/dist/i18n/help.js +7 -0
  127. package/dist/i18n/help.js.map +1 -0
  128. package/dist/i18n/help.zh.d.ts +149 -0
  129. package/dist/i18n/help.zh.js +150 -0
  130. package/dist/i18n/help.zh.js.map +1 -0
  131. package/dist/i18n/helpFormat.d.ts +7 -0
  132. package/dist/i18n/helpFormat.js +51 -0
  133. package/dist/i18n/helpFormat.js.map +1 -0
  134. package/dist/i18n/helpGroups.d.ts +3 -0
  135. package/dist/i18n/helpGroups.js +11 -0
  136. package/dist/i18n/helpGroups.js.map +1 -0
  137. package/dist/i18n/index.d.ts +16 -0
  138. package/dist/i18n/index.js +46 -0
  139. package/dist/i18n/index.js.map +1 -0
  140. package/dist/i18n/peekLang.d.ts +1 -0
  141. package/dist/i18n/peekLang.js +16 -0
  142. package/dist/i18n/peekLang.js.map +1 -0
  143. package/dist/i18n/zh.d.ts +680 -0
  144. package/dist/i18n/zh.js +288 -0
  145. package/dist/i18n/zh.js.map +1 -0
  146. package/dist/parser/discover.d.ts +2 -0
  147. package/dist/parser/discover.js +69 -0
  148. package/dist/parser/discover.js.map +1 -0
  149. package/dist/parser/load-yaml.d.ts +11 -0
  150. package/dist/parser/load-yaml.js +25 -0
  151. package/dist/parser/load-yaml.js.map +1 -0
  152. package/dist/pkgVersion.d.ts +9 -0
  153. package/dist/pkgVersion.js +22 -0
  154. package/dist/pkgVersion.js.map +1 -0
  155. package/dist/renderer/context-md.d.ts +27 -0
  156. package/dist/renderer/context-md.js +444 -0
  157. package/dist/renderer/context-md.js.map +1 -0
  158. package/dist/renderer/refresh-md.d.ts +18 -0
  159. package/dist/renderer/refresh-md.js +93 -0
  160. package/dist/renderer/refresh-md.js.map +1 -0
  161. package/dist/schema/index.d.ts +2 -0
  162. package/dist/schema/index.js +3 -0
  163. package/dist/schema/index.js.map +1 -0
  164. package/dist/schema/modules.d.ts +461 -0
  165. package/dist/schema/modules.js +184 -0
  166. package/dist/schema/modules.js.map +1 -0
  167. package/dist/schema/prd.d.ts +1018 -0
  168. package/dist/schema/prd.js +65 -0
  169. package/dist/schema/prd.js.map +1 -0
  170. package/dist/sync/cliRcHelpers.d.ts +25 -0
  171. package/dist/sync/cliRcHelpers.js +62 -0
  172. package/dist/sync/cliRcHelpers.js.map +1 -0
  173. package/dist/sync/conflicts.d.ts +7 -0
  174. package/dist/sync/conflicts.js +72 -0
  175. package/dist/sync/conflicts.js.map +1 -0
  176. package/dist/sync/headProbe.d.ts +1 -0
  177. package/dist/sync/headProbe.js +95 -0
  178. package/dist/sync/headProbe.js.map +1 -0
  179. package/dist/sync/normalize.d.ts +10 -0
  180. package/dist/sync/normalize.js +13 -0
  181. package/dist/sync/normalize.js.map +1 -0
  182. package/dist/sync/syncJson.d.ts +18 -0
  183. package/dist/sync/syncJson.js +42 -0
  184. package/dist/sync/syncJson.js.map +1 -0
  185. package/dist/types.d.ts +70 -0
  186. package/dist/types.js +21 -0
  187. package/dist/types.js.map +1 -0
  188. package/dist/validators/blocking.d.ts +2 -0
  189. package/dist/validators/blocking.js +25 -0
  190. package/dist/validators/blocking.js.map +1 -0
  191. package/dist/validators/duplicate-ids.d.ts +2 -0
  192. package/dist/validators/duplicate-ids.js +58 -0
  193. package/dist/validators/duplicate-ids.js.map +1 -0
  194. package/dist/validators/references.d.ts +5 -0
  195. package/dist/validators/references.js +165 -0
  196. package/dist/validators/references.js.map +1 -0
  197. package/dist/validators/required-modules.d.ts +8 -0
  198. package/dist/validators/required-modules.js +59 -0
  199. package/dist/validators/required-modules.js.map +1 -0
  200. package/dist/validators/runner.d.ts +11 -0
  201. package/dist/validators/runner.js +73 -0
  202. package/dist/validators/runner.js.map +1 -0
  203. package/dist/workspace.d.ts +32 -0
  204. package/dist/workspace.js +37 -0
  205. package/dist/workspace.js.map +1 -0
  206. package/dist/yaml-indexer.d.ts +15 -0
  207. package/dist/yaml-indexer.js +112 -0
  208. package/dist/yaml-indexer.js.map +1 -0
  209. package/package.json +50 -0
@@ -0,0 +1,461 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * kebab-case slug 模式(v0.2 起 meta.team / project / feature 使用):
4
+ * - 首字符必须小写字母(避免数字/连字符开头)
5
+ * - 后续字符 a-z 0-9 -(连字符)
6
+ * - 总长度 2-64 字符
7
+ * 与 server 端 sqlite CHECK `slug GLOB '[a-z][a-z0-9-]*[a-z0-9]'` 对齐
8
+ * (reviewer M1 alignment;见 spec §1 D8 / §3.2)。
9
+ */
10
+ export declare const slugPattern: RegExp;
11
+ export declare const metaSchema: z.ZodObject<{
12
+ team: z.ZodOptional<z.ZodString>;
13
+ project: z.ZodString;
14
+ feature: z.ZodString;
15
+ title: z.ZodString;
16
+ summary: z.ZodString;
17
+ owner: z.ZodString;
18
+ tags: z.ZodArray<z.ZodString, "many">;
19
+ created_at: z.ZodString;
20
+ source_materials: z.ZodArray<z.ZodObject<{
21
+ type: z.ZodString;
22
+ title: z.ZodString;
23
+ url: z.ZodString;
24
+ excerpt: z.ZodString;
25
+ captured_at: z.ZodString;
26
+ }, "strict", z.ZodTypeAny, {
27
+ type: string;
28
+ title: string;
29
+ url: string;
30
+ excerpt: string;
31
+ captured_at: string;
32
+ }, {
33
+ type: string;
34
+ title: string;
35
+ url: string;
36
+ excerpt: string;
37
+ captured_at: string;
38
+ }>, "many">;
39
+ lifecycle: z.ZodObject<{
40
+ version: z.ZodString;
41
+ status: z.ZodString;
42
+ updated_at: z.ZodString;
43
+ }, "strict", z.ZodTypeAny, {
44
+ status: string;
45
+ version: string;
46
+ updated_at: string;
47
+ }, {
48
+ status: string;
49
+ version: string;
50
+ updated_at: string;
51
+ }>;
52
+ }, "strict", z.ZodTypeAny, {
53
+ title: string;
54
+ project: string;
55
+ feature: string;
56
+ summary: string;
57
+ owner: string;
58
+ tags: string[];
59
+ created_at: string;
60
+ source_materials: {
61
+ type: string;
62
+ title: string;
63
+ url: string;
64
+ excerpt: string;
65
+ captured_at: string;
66
+ }[];
67
+ lifecycle: {
68
+ status: string;
69
+ version: string;
70
+ updated_at: string;
71
+ };
72
+ team?: string | undefined;
73
+ }, {
74
+ title: string;
75
+ project: string;
76
+ feature: string;
77
+ summary: string;
78
+ owner: string;
79
+ tags: string[];
80
+ created_at: string;
81
+ source_materials: {
82
+ type: string;
83
+ title: string;
84
+ url: string;
85
+ excerpt: string;
86
+ captured_at: string;
87
+ }[];
88
+ lifecycle: {
89
+ status: string;
90
+ version: string;
91
+ updated_at: string;
92
+ };
93
+ team?: string | undefined;
94
+ }>;
95
+ export declare const backgroundAndGoalsSchema: z.ZodObject<{
96
+ background: z.ZodString;
97
+ goals: z.ZodArray<z.ZodString, "many">;
98
+ }, "strict", z.ZodTypeAny, {
99
+ background: string;
100
+ goals: string[];
101
+ }, {
102
+ background: string;
103
+ goals: string[];
104
+ }>;
105
+ export declare const userRoleSchema: z.ZodObject<{
106
+ role: z.ZodString;
107
+ description: z.ZodString;
108
+ typical_goals: z.ZodArray<z.ZodString, "many">;
109
+ }, "strict", z.ZodTypeAny, {
110
+ role: string;
111
+ description: string;
112
+ typical_goals: string[];
113
+ }, {
114
+ role: string;
115
+ description: string;
116
+ typical_goals: string[];
117
+ }>;
118
+ export declare const inScopeItemSchema: z.ZodObject<{
119
+ id: z.ZodString;
120
+ name: z.ZodString;
121
+ summary: z.ZodString;
122
+ }, "strict", z.ZodTypeAny, {
123
+ summary: string;
124
+ id: string;
125
+ name: string;
126
+ }, {
127
+ summary: string;
128
+ id: string;
129
+ name: string;
130
+ }>;
131
+ export declare const outOfScopeItemSchema: z.ZodObject<{
132
+ item: z.ZodString;
133
+ reason: z.ZodString;
134
+ }, "strict", z.ZodTypeAny, {
135
+ item: string;
136
+ reason: string;
137
+ }, {
138
+ item: string;
139
+ reason: string;
140
+ }>;
141
+ export declare const entitySchema: z.ZodObject<{
142
+ id: z.ZodString;
143
+ name: z.ZodString;
144
+ description: z.ZodString;
145
+ fields: z.ZodArray<z.ZodObject<{
146
+ name: z.ZodString;
147
+ type: z.ZodString;
148
+ required: z.ZodOptional<z.ZodBoolean>;
149
+ notes: z.ZodOptional<z.ZodString>;
150
+ }, "strict", z.ZodTypeAny, {
151
+ type: string;
152
+ name: string;
153
+ required?: boolean | undefined;
154
+ notes?: string | undefined;
155
+ }, {
156
+ type: string;
157
+ name: string;
158
+ required?: boolean | undefined;
159
+ notes?: string | undefined;
160
+ }>, "many">;
161
+ relations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
162
+ lifecycle_states: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
163
+ }, "strict", z.ZodTypeAny, {
164
+ description: string;
165
+ id: string;
166
+ name: string;
167
+ fields: {
168
+ type: string;
169
+ name: string;
170
+ required?: boolean | undefined;
171
+ notes?: string | undefined;
172
+ }[];
173
+ relations?: string[] | undefined;
174
+ lifecycle_states?: string[] | undefined;
175
+ }, {
176
+ description: string;
177
+ id: string;
178
+ name: string;
179
+ fields: {
180
+ type: string;
181
+ name: string;
182
+ required?: boolean | undefined;
183
+ notes?: string | undefined;
184
+ }[];
185
+ relations?: string[] | undefined;
186
+ lifecycle_states?: string[] | undefined;
187
+ }>;
188
+ export declare const mainFlowStepSchema: z.ZodObject<{
189
+ step: z.ZodNumber;
190
+ actor: z.ZodString;
191
+ trigger: z.ZodString;
192
+ action: z.ZodString;
193
+ outcome: z.ZodString;
194
+ }, "strict", z.ZodTypeAny, {
195
+ step: number;
196
+ actor: string;
197
+ trigger: string;
198
+ action: string;
199
+ outcome: string;
200
+ }, {
201
+ step: number;
202
+ actor: string;
203
+ trigger: string;
204
+ action: string;
205
+ outcome: string;
206
+ }>;
207
+ export declare const statePermissionSchema: z.ZodObject<{
208
+ entity_id: z.ZodString;
209
+ state: z.ZodString;
210
+ allowed_actions: z.ZodArray<z.ZodObject<{
211
+ action: z.ZodString;
212
+ roles: z.ZodArray<z.ZodString, "many">;
213
+ notes: z.ZodOptional<z.ZodString>;
214
+ }, "strict", z.ZodTypeAny, {
215
+ action: string;
216
+ roles: string[];
217
+ notes?: string | undefined;
218
+ }, {
219
+ action: string;
220
+ roles: string[];
221
+ notes?: string | undefined;
222
+ }>, "many">;
223
+ notes: z.ZodOptional<z.ZodString>;
224
+ }, "strict", z.ZodTypeAny, {
225
+ entity_id: string;
226
+ state: string;
227
+ allowed_actions: {
228
+ action: string;
229
+ roles: string[];
230
+ notes?: string | undefined;
231
+ }[];
232
+ notes?: string | undefined;
233
+ }, {
234
+ entity_id: string;
235
+ state: string;
236
+ allowed_actions: {
237
+ action: string;
238
+ roles: string[];
239
+ notes?: string | undefined;
240
+ }[];
241
+ notes?: string | undefined;
242
+ }>;
243
+ export declare const businessRuleSchema: z.ZodObject<{
244
+ id: z.ZodString;
245
+ rule: z.ZodString;
246
+ rationale: z.ZodOptional<z.ZodString>;
247
+ applies_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
248
+ }, "strict", z.ZodTypeAny, {
249
+ id: string;
250
+ rule: string;
251
+ rationale?: string | undefined;
252
+ applies_to?: string[] | undefined;
253
+ }, {
254
+ id: string;
255
+ rule: string;
256
+ rationale?: string | undefined;
257
+ applies_to?: string[] | undefined;
258
+ }>;
259
+ export declare const scenarioSchema: z.ZodObject<{
260
+ id: z.ZodString;
261
+ condition: z.ZodString;
262
+ expected_behavior: z.ZodString;
263
+ input: z.ZodOptional<z.ZodString>;
264
+ output: z.ZodOptional<z.ZodString>;
265
+ refers_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
266
+ }, "strict", z.ZodTypeAny, {
267
+ id: string;
268
+ condition: string;
269
+ expected_behavior: string;
270
+ input?: string | undefined;
271
+ output?: string | undefined;
272
+ refers_to?: string[] | undefined;
273
+ }, {
274
+ id: string;
275
+ condition: string;
276
+ expected_behavior: string;
277
+ input?: string | undefined;
278
+ output?: string | undefined;
279
+ refers_to?: string[] | undefined;
280
+ }>;
281
+ export declare const edgeCaseSchema: z.ZodObject<{
282
+ id: z.ZodString;
283
+ situation: z.ZodString;
284
+ expected_behavior: z.ZodString;
285
+ mitigation: z.ZodOptional<z.ZodString>;
286
+ }, "strict", z.ZodTypeAny, {
287
+ id: string;
288
+ expected_behavior: string;
289
+ situation: string;
290
+ mitigation?: string | undefined;
291
+ }, {
292
+ id: string;
293
+ expected_behavior: string;
294
+ situation: string;
295
+ mitigation?: string | undefined;
296
+ }>;
297
+ export declare const uiPageSchema: z.ZodObject<{
298
+ id: z.ZodString;
299
+ page: z.ZodString;
300
+ purpose: z.ZodString;
301
+ key_elements: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
302
+ user_actions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
303
+ empty_state: z.ZodOptional<z.ZodString>;
304
+ loading_state: z.ZodOptional<z.ZodString>;
305
+ error_state: z.ZodOptional<z.ZodString>;
306
+ }, "strict", z.ZodTypeAny, {
307
+ id: string;
308
+ page: string;
309
+ purpose: string;
310
+ key_elements?: string[] | undefined;
311
+ user_actions?: string[] | undefined;
312
+ empty_state?: string | undefined;
313
+ loading_state?: string | undefined;
314
+ error_state?: string | undefined;
315
+ }, {
316
+ id: string;
317
+ page: string;
318
+ purpose: string;
319
+ key_elements?: string[] | undefined;
320
+ user_actions?: string[] | undefined;
321
+ empty_state?: string | undefined;
322
+ loading_state?: string | undefined;
323
+ error_state?: string | undefined;
324
+ }>;
325
+ export declare const dataAndApiSchema: z.ZodObject<{
326
+ data_constraints: z.ZodArray<z.ZodObject<{
327
+ id: z.ZodString;
328
+ text: z.ZodString;
329
+ applies_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
330
+ }, "strict", z.ZodTypeAny, {
331
+ id: string;
332
+ text: string;
333
+ applies_to?: string[] | undefined;
334
+ }, {
335
+ id: string;
336
+ text: string;
337
+ applies_to?: string[] | undefined;
338
+ }>, "many">;
339
+ api_constraints: z.ZodArray<z.ZodObject<{
340
+ id: z.ZodString;
341
+ text: z.ZodString;
342
+ applies_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
343
+ }, "strict", z.ZodTypeAny, {
344
+ id: string;
345
+ text: string;
346
+ applies_to?: string[] | undefined;
347
+ }, {
348
+ id: string;
349
+ text: string;
350
+ applies_to?: string[] | undefined;
351
+ }>, "many">;
352
+ performance_constraints: z.ZodArray<z.ZodObject<{
353
+ id: z.ZodString;
354
+ text: z.ZodString;
355
+ applies_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
356
+ }, "strict", z.ZodTypeAny, {
357
+ id: string;
358
+ text: string;
359
+ applies_to?: string[] | undefined;
360
+ }, {
361
+ id: string;
362
+ text: string;
363
+ applies_to?: string[] | undefined;
364
+ }>, "many">;
365
+ security_constraints: z.ZodArray<z.ZodObject<{
366
+ id: z.ZodString;
367
+ text: z.ZodString;
368
+ applies_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
369
+ }, "strict", z.ZodTypeAny, {
370
+ id: string;
371
+ text: string;
372
+ applies_to?: string[] | undefined;
373
+ }, {
374
+ id: string;
375
+ text: string;
376
+ applies_to?: string[] | undefined;
377
+ }>, "many">;
378
+ }, "strict", z.ZodTypeAny, {
379
+ data_constraints: {
380
+ id: string;
381
+ text: string;
382
+ applies_to?: string[] | undefined;
383
+ }[];
384
+ api_constraints: {
385
+ id: string;
386
+ text: string;
387
+ applies_to?: string[] | undefined;
388
+ }[];
389
+ performance_constraints: {
390
+ id: string;
391
+ text: string;
392
+ applies_to?: string[] | undefined;
393
+ }[];
394
+ security_constraints: {
395
+ id: string;
396
+ text: string;
397
+ applies_to?: string[] | undefined;
398
+ }[];
399
+ }, {
400
+ data_constraints: {
401
+ id: string;
402
+ text: string;
403
+ applies_to?: string[] | undefined;
404
+ }[];
405
+ api_constraints: {
406
+ id: string;
407
+ text: string;
408
+ applies_to?: string[] | undefined;
409
+ }[];
410
+ performance_constraints: {
411
+ id: string;
412
+ text: string;
413
+ applies_to?: string[] | undefined;
414
+ }[];
415
+ security_constraints: {
416
+ id: string;
417
+ text: string;
418
+ applies_to?: string[] | undefined;
419
+ }[];
420
+ }>;
421
+ export declare const acceptanceCriterionSchema: z.ZodObject<{
422
+ id: z.ZodString;
423
+ criterion: z.ZodString;
424
+ priority: z.ZodEnum<["must", "should", "could"]>;
425
+ verification_method: z.ZodString;
426
+ refers_to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
427
+ }, "strict", z.ZodTypeAny, {
428
+ id: string;
429
+ criterion: string;
430
+ priority: "must" | "should" | "could";
431
+ verification_method: string;
432
+ refers_to?: string[] | undefined;
433
+ }, {
434
+ id: string;
435
+ criterion: string;
436
+ priority: "must" | "should" | "could";
437
+ verification_method: string;
438
+ refers_to?: string[] | undefined;
439
+ }>;
440
+ export declare const openQuestionSchema: z.ZodObject<{
441
+ id: z.ZodString;
442
+ question: z.ZodString;
443
+ severity: z.ZodEnum<["blocking", "non_blocking"]>;
444
+ deferred_to: z.ZodString;
445
+ owner: z.ZodString;
446
+ due_date: z.ZodOptional<z.ZodString>;
447
+ }, "strict", z.ZodTypeAny, {
448
+ owner: string;
449
+ id: string;
450
+ question: string;
451
+ severity: "blocking" | "non_blocking";
452
+ deferred_to: string;
453
+ due_date?: string | undefined;
454
+ }, {
455
+ owner: string;
456
+ id: string;
457
+ question: string;
458
+ severity: "blocking" | "non_blocking";
459
+ deferred_to: string;
460
+ due_date?: string | undefined;
461
+ }>;
@@ -0,0 +1,184 @@
1
+ import { z } from "zod";
2
+ /** 通用 ID 模式。前缀大写字母,数字后缀。 */
3
+ const idPattern = /^[A-Z]+-\d+$/;
4
+ /**
5
+ * kebab-case slug 模式(v0.2 起 meta.team / project / feature 使用):
6
+ * - 首字符必须小写字母(避免数字/连字符开头)
7
+ * - 后续字符 a-z 0-9 -(连字符)
8
+ * - 总长度 2-64 字符
9
+ * 与 server 端 sqlite CHECK `slug GLOB '[a-z][a-z0-9-]*[a-z0-9]'` 对齐
10
+ * (reviewer M1 alignment;见 spec §1 D8 / §3.2)。
11
+ */
12
+ export const slugPattern = /^[a-z][a-z0-9-]{1,63}$/;
13
+ const sourceMaterialSchema = z
14
+ .object({
15
+ type: z.string(),
16
+ title: z.string(),
17
+ url: z.string(),
18
+ excerpt: z.string(),
19
+ captured_at: z.string(),
20
+ })
21
+ .strict();
22
+ const lifecycleSchema = z
23
+ .object({
24
+ version: z.string(),
25
+ status: z.string(),
26
+ updated_at: z.string(),
27
+ })
28
+ .strict();
29
+ export const metaSchema = z
30
+ .object({
31
+ // v0.2 起新增,v0.1 文件不带该字段(由 PrdSchema 顶层 superRefine 按 schema_version 强制)。
32
+ team: z.string().optional(),
33
+ project: z.string(),
34
+ feature: z.string(),
35
+ title: z.string(),
36
+ summary: z.string(),
37
+ owner: z.string(),
38
+ tags: z.array(z.string()),
39
+ created_at: z.string(),
40
+ source_materials: z.array(sourceMaterialSchema),
41
+ lifecycle: lifecycleSchema,
42
+ })
43
+ .strict();
44
+ export const backgroundAndGoalsSchema = z
45
+ .object({
46
+ background: z.string(),
47
+ goals: z.array(z.string()),
48
+ })
49
+ .strict();
50
+ export const userRoleSchema = z
51
+ .object({
52
+ role: z.string(),
53
+ description: z.string(),
54
+ typical_goals: z.array(z.string()),
55
+ })
56
+ .strict();
57
+ export const inScopeItemSchema = z
58
+ .object({
59
+ id: z.string().regex(idPattern),
60
+ name: z.string(),
61
+ summary: z.string(),
62
+ })
63
+ .strict();
64
+ export const outOfScopeItemSchema = z
65
+ .object({
66
+ item: z.string(),
67
+ reason: z.string(),
68
+ })
69
+ .strict();
70
+ const entityFieldSchema = z
71
+ .object({
72
+ name: z.string(),
73
+ type: z.string(),
74
+ required: z.boolean().optional(),
75
+ notes: z.string().optional(),
76
+ })
77
+ .strict();
78
+ export const entitySchema = z
79
+ .object({
80
+ id: z.string().regex(idPattern),
81
+ name: z.string(),
82
+ description: z.string(),
83
+ fields: z.array(entityFieldSchema),
84
+ relations: z.array(z.string()).optional(),
85
+ lifecycle_states: z.array(z.string()).optional(),
86
+ })
87
+ .strict();
88
+ export const mainFlowStepSchema = z
89
+ .object({
90
+ step: z.number(),
91
+ actor: z.string(),
92
+ trigger: z.string(),
93
+ action: z.string(),
94
+ outcome: z.string(),
95
+ })
96
+ .strict();
97
+ const allowedActionSchema = z
98
+ .object({
99
+ action: z.string(),
100
+ roles: z.array(z.string()),
101
+ notes: z.string().optional(),
102
+ })
103
+ .strict();
104
+ export const statePermissionSchema = z
105
+ .object({
106
+ entity_id: z.string().regex(idPattern),
107
+ state: z.string(),
108
+ allowed_actions: z.array(allowedActionSchema),
109
+ notes: z.string().optional(),
110
+ })
111
+ .strict();
112
+ export const businessRuleSchema = z
113
+ .object({
114
+ id: z.string().regex(idPattern),
115
+ rule: z.string(),
116
+ rationale: z.string().optional(),
117
+ applies_to: z.array(z.string()).optional(),
118
+ })
119
+ .strict();
120
+ export const scenarioSchema = z
121
+ .object({
122
+ id: z.string().regex(idPattern),
123
+ condition: z.string(),
124
+ expected_behavior: z.string(),
125
+ input: z.string().optional(),
126
+ output: z.string().optional(),
127
+ refers_to: z.array(z.string()).optional(),
128
+ })
129
+ .strict();
130
+ export const edgeCaseSchema = z
131
+ .object({
132
+ id: z.string().regex(idPattern),
133
+ situation: z.string(),
134
+ expected_behavior: z.string(),
135
+ mitigation: z.string().optional(),
136
+ })
137
+ .strict();
138
+ export const uiPageSchema = z
139
+ .object({
140
+ id: z.string().regex(idPattern),
141
+ page: z.string(),
142
+ purpose: z.string(),
143
+ key_elements: z.array(z.string()).optional(),
144
+ user_actions: z.array(z.string()).optional(),
145
+ empty_state: z.string().optional(),
146
+ loading_state: z.string().optional(),
147
+ error_state: z.string().optional(),
148
+ })
149
+ .strict();
150
+ const constraintSchema = z
151
+ .object({
152
+ id: z.string().regex(idPattern),
153
+ text: z.string(),
154
+ applies_to: z.array(z.string()).optional(),
155
+ })
156
+ .strict();
157
+ export const dataAndApiSchema = z
158
+ .object({
159
+ data_constraints: z.array(constraintSchema),
160
+ api_constraints: z.array(constraintSchema),
161
+ performance_constraints: z.array(constraintSchema),
162
+ security_constraints: z.array(constraintSchema),
163
+ })
164
+ .strict();
165
+ export const acceptanceCriterionSchema = z
166
+ .object({
167
+ id: z.string().regex(idPattern),
168
+ criterion: z.string(),
169
+ priority: z.enum(["must", "should", "could"]),
170
+ verification_method: z.string(),
171
+ refers_to: z.array(z.string()).optional(),
172
+ })
173
+ .strict();
174
+ export const openQuestionSchema = z
175
+ .object({
176
+ id: z.string().regex(idPattern),
177
+ question: z.string(),
178
+ severity: z.enum(["blocking", "non_blocking"]),
179
+ deferred_to: z.string(),
180
+ owner: z.string(),
181
+ due_date: z.string().optional(),
182
+ })
183
+ .strict();
184
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/schema/modules.ts"],"names":[],"mappings":"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"}