specdo 1.0.2

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 (161) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/README.md +308 -0
  3. package/README.zh-CN.md +306 -0
  4. package/bin/specdo.js +3 -0
  5. package/dist/cli/index.d.ts +15 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +297 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/commands/_shared.d.ts +45 -0
  10. package/dist/commands/_shared.d.ts.map +1 -0
  11. package/dist/commands/_shared.js +124 -0
  12. package/dist/commands/_shared.js.map +1 -0
  13. package/dist/commands/apply.d.ts +30 -0
  14. package/dist/commands/apply.d.ts.map +1 -0
  15. package/dist/commands/apply.js +393 -0
  16. package/dist/commands/apply.js.map +1 -0
  17. package/dist/commands/archive.d.ts +25 -0
  18. package/dist/commands/archive.d.ts.map +1 -0
  19. package/dist/commands/archive.js +362 -0
  20. package/dist/commands/archive.js.map +1 -0
  21. package/dist/commands/doctor.d.ts +21 -0
  22. package/dist/commands/doctor.d.ts.map +1 -0
  23. package/dist/commands/doctor.js +180 -0
  24. package/dist/commands/doctor.js.map +1 -0
  25. package/dist/commands/domains.d.ts +14 -0
  26. package/dist/commands/domains.d.ts.map +1 -0
  27. package/dist/commands/domains.js +107 -0
  28. package/dist/commands/domains.js.map +1 -0
  29. package/dist/commands/explore.d.ts +48 -0
  30. package/dist/commands/explore.d.ts.map +1 -0
  31. package/dist/commands/explore.js +378 -0
  32. package/dist/commands/explore.js.map +1 -0
  33. package/dist/commands/init.d.ts +45 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +243 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/list.d.ts +23 -0
  38. package/dist/commands/list.d.ts.map +1 -0
  39. package/dist/commands/list.js +135 -0
  40. package/dist/commands/list.js.map +1 -0
  41. package/dist/commands/propose.d.ts +22 -0
  42. package/dist/commands/propose.d.ts.map +1 -0
  43. package/dist/commands/propose.js +316 -0
  44. package/dist/commands/propose.js.map +1 -0
  45. package/dist/commands/show.d.ts +15 -0
  46. package/dist/commands/show.d.ts.map +1 -0
  47. package/dist/commands/show.js +214 -0
  48. package/dist/commands/show.js.map +1 -0
  49. package/dist/commands/status.d.ts +17 -0
  50. package/dist/commands/status.d.ts.map +1 -0
  51. package/dist/commands/status.js +146 -0
  52. package/dist/commands/status.js.map +1 -0
  53. package/dist/commands/sync.d.ts +21 -0
  54. package/dist/commands/sync.d.ts.map +1 -0
  55. package/dist/commands/sync.js +113 -0
  56. package/dist/commands/sync.js.map +1 -0
  57. package/dist/commands/validate.d.ts +117 -0
  58. package/dist/commands/validate.d.ts.map +1 -0
  59. package/dist/commands/validate.js +446 -0
  60. package/dist/commands/validate.js.map +1 -0
  61. package/dist/core/apply-brief-renderer.d.ts +35 -0
  62. package/dist/core/apply-brief-renderer.d.ts.map +1 -0
  63. package/dist/core/apply-brief-renderer.js +242 -0
  64. package/dist/core/apply-brief-renderer.js.map +1 -0
  65. package/dist/core/config-store.d.ts +190 -0
  66. package/dist/core/config-store.d.ts.map +1 -0
  67. package/dist/core/config-store.js +280 -0
  68. package/dist/core/config-store.js.map +1 -0
  69. package/dist/core/context-store.d.ts +96 -0
  70. package/dist/core/context-store.d.ts.map +1 -0
  71. package/dist/core/context-store.js +426 -0
  72. package/dist/core/context-store.js.map +1 -0
  73. package/dist/core/json-schemas.d.ts +349 -0
  74. package/dist/core/json-schemas.d.ts.map +1 -0
  75. package/dist/core/json-schemas.js +125 -0
  76. package/dist/core/json-schemas.js.map +1 -0
  77. package/dist/core/skill-content/cross-domain.d.ts +12 -0
  78. package/dist/core/skill-content/cross-domain.d.ts.map +1 -0
  79. package/dist/core/skill-content/cross-domain.js +291 -0
  80. package/dist/core/skill-content/cross-domain.js.map +1 -0
  81. package/dist/core/skill-content/protocol-examples.d.ts +13 -0
  82. package/dist/core/skill-content/protocol-examples.d.ts.map +1 -0
  83. package/dist/core/skill-content/protocol-examples.js +190 -0
  84. package/dist/core/skill-content/protocol-examples.js.map +1 -0
  85. package/dist/core/skill-content/workflow-content.d.ts +25 -0
  86. package/dist/core/skill-content/workflow-content.d.ts.map +1 -0
  87. package/dist/core/skill-content/workflow-content.js +1572 -0
  88. package/dist/core/skill-content/workflow-content.js.map +1 -0
  89. package/dist/core/skill-exporter.d.ts +186 -0
  90. package/dist/core/skill-exporter.d.ts.map +1 -0
  91. package/dist/core/skill-exporter.js +922 -0
  92. package/dist/core/skill-exporter.js.map +1 -0
  93. package/dist/core/spec-sync.d.ts +65 -0
  94. package/dist/core/spec-sync.d.ts.map +1 -0
  95. package/dist/core/spec-sync.js +226 -0
  96. package/dist/core/spec-sync.js.map +1 -0
  97. package/dist/core/task-parser.d.ts +58 -0
  98. package/dist/core/task-parser.d.ts.map +1 -0
  99. package/dist/core/task-parser.js +244 -0
  100. package/dist/core/task-parser.js.map +1 -0
  101. package/dist/core/template-renderer.d.ts +51 -0
  102. package/dist/core/template-renderer.d.ts.map +1 -0
  103. package/dist/core/template-renderer.js +362 -0
  104. package/dist/core/template-renderer.js.map +1 -0
  105. package/dist/domains/architecture.d.ts +34 -0
  106. package/dist/domains/architecture.d.ts.map +1 -0
  107. package/dist/domains/architecture.js +341 -0
  108. package/dist/domains/architecture.js.map +1 -0
  109. package/dist/domains/backend.d.ts +35 -0
  110. package/dist/domains/backend.d.ts.map +1 -0
  111. package/dist/domains/backend.js +367 -0
  112. package/dist/domains/backend.js.map +1 -0
  113. package/dist/domains/frontend.d.ts +36 -0
  114. package/dist/domains/frontend.d.ts.map +1 -0
  115. package/dist/domains/frontend.js +373 -0
  116. package/dist/domains/frontend.js.map +1 -0
  117. package/dist/domains/index.d.ts +49 -0
  118. package/dist/domains/index.d.ts.map +1 -0
  119. package/dist/domains/index.js +255 -0
  120. package/dist/domains/index.js.map +1 -0
  121. package/dist/domains/operations.d.ts +37 -0
  122. package/dist/domains/operations.d.ts.map +1 -0
  123. package/dist/domains/operations.js +344 -0
  124. package/dist/domains/operations.js.map +1 -0
  125. package/dist/domains/pool-ranking.d.ts +43 -0
  126. package/dist/domains/pool-ranking.d.ts.map +1 -0
  127. package/dist/domains/pool-ranking.js +153 -0
  128. package/dist/domains/pool-ranking.js.map +1 -0
  129. package/dist/domains/quality.d.ts +45 -0
  130. package/dist/domains/quality.d.ts.map +1 -0
  131. package/dist/domains/quality.js +368 -0
  132. package/dist/domains/quality.js.map +1 -0
  133. package/dist/domains/security.d.ts +19 -0
  134. package/dist/domains/security.d.ts.map +1 -0
  135. package/dist/domains/security.js +364 -0
  136. package/dist/domains/security.js.map +1 -0
  137. package/dist/domains/signal-match.d.ts +25 -0
  138. package/dist/domains/signal-match.d.ts.map +1 -0
  139. package/dist/domains/signal-match.js +67 -0
  140. package/dist/domains/signal-match.js.map +1 -0
  141. package/dist/domains/types.d.ts +354 -0
  142. package/dist/domains/types.d.ts.map +1 -0
  143. package/dist/domains/types.js +12 -0
  144. package/dist/domains/types.js.map +1 -0
  145. package/dist/index.d.ts +9 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +9 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/protocols/index.d.ts +36 -0
  150. package/dist/protocols/index.d.ts.map +1 -0
  151. package/dist/protocols/index.js +85 -0
  152. package/dist/protocols/index.js.map +1 -0
  153. package/dist/protocols/review-to-solid.d.ts +32 -0
  154. package/dist/protocols/review-to-solid.d.ts.map +1 -0
  155. package/dist/protocols/review-to-solid.js +309 -0
  156. package/dist/protocols/review-to-solid.js.map +1 -0
  157. package/dist/utils/prompt.d.ts +37 -0
  158. package/dist/utils/prompt.d.ts.map +1 -0
  159. package/dist/utils/prompt.js +81 -0
  160. package/dist/utils/prompt.js.map +1 -0
  161. package/package.json +80 -0
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Domain Registry
3
+ *
4
+ * 所有领域模块的注册中心和匹配引擎。
5
+ * scoreDomains() 是领域注入的核心函数 — 每个工作流阶段都通过它决定注入哪些领域知识。
6
+ */
7
+ import { securityDomain } from './security.js';
8
+ import { architectureDomain } from './architecture.js';
9
+ import { operationsDomain } from './operations.js';
10
+ import { backendDomain } from './backend.js';
11
+ import { qualityDomain } from './quality.js';
12
+ import { frontendDomain } from './frontend.js';
13
+ import { tokenize, signalMatchesToken } from './signal-match.js';
14
+ // Re-export for external consumers
15
+ export { tokenize, signalMatchesToken, TOKENIZE_SPLIT_CHARS, MIN_SIGNAL_LENGTH_FOR_SUBSTRING } from './signal-match.js';
16
+ export { rankQuestions, upgradeLegacyQuestions, extractQuestions, getQuestionCount, isQuestionPool } from './pool-ranking.js';
17
+ // ─── Registry ──────────────────────────────────────────────────
18
+ /** 所有领域模块(6 领域全部注册) */
19
+ export const ALL_DOMAINS = [
20
+ securityDomain,
21
+ architectureDomain,
22
+ operationsDomain,
23
+ backendDomain,
24
+ qualityDomain,
25
+ frontendDomain,
26
+ ];
27
+ /** 按名称查找领域模块 */
28
+ export function getDomainByName(name) {
29
+ return ALL_DOMAINS.find((d) => d.name === name);
30
+ }
31
+ // ─── applyOverrides ────────────────────────────────────────────
32
+ /**
33
+ * 将项目级领域规则覆盖合并到领域模块中。
34
+ *
35
+ * 不可变操作 — 返回新 DomainModule,不修改原始模块。
36
+ *
37
+ * OverrideItem 合并规则:
38
+ * - prepend: 插入到列表最前面
39
+ * - append: 追加到列表最后面
40
+ * - replace: 整段替换默认列表;一旦出现 replace,prepend / append 全部失效
41
+ * - patterns 直接合并(同名 key 用覆盖值)
42
+ *
43
+ * 多模块共享: 对于 checklist、focusAreas、antiPatterns 等列表字段,
44
+ * 不同 stage 独立合并,不会冲突。
45
+ *
46
+ * @param domain - 原始领域模块
47
+ * @param overrides - 项目级覆盖配置(来自 config.yaml domains.overrides)
48
+ * @returns 合并了项目规则的新领域模块
49
+ */
50
+ export function applyOverrides(domain, overrides) {
51
+ if (!overrides) {
52
+ return domain;
53
+ }
54
+ const result = { ...domain };
55
+ if (overrides.explore && domain.explore) {
56
+ if (overrides.explore.enabled === false) {
57
+ result.explore = undefined;
58
+ }
59
+ else {
60
+ result.explore = mergeExploreStage(domain.explore, overrides.explore);
61
+ }
62
+ }
63
+ if (overrides.design && domain.design) {
64
+ if (overrides.design.enabled === false) {
65
+ result.design = undefined;
66
+ }
67
+ else {
68
+ result.design = mergeStage(domain.design, overrides.design);
69
+ }
70
+ }
71
+ if (overrides.implement && domain.implement) {
72
+ if (overrides.implement.enabled === false) {
73
+ result.implement = undefined;
74
+ }
75
+ else {
76
+ result.implement = mergeStage(domain.implement, overrides.implement);
77
+ }
78
+ }
79
+ if (overrides.verify && domain.verify) {
80
+ if (overrides.verify.enabled === false) {
81
+ result.verify = undefined;
82
+ }
83
+ else {
84
+ result.verify = mergeStage(domain.verify, overrides.verify);
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ // ─── merge helpers ─────────────────────────────────────────────
90
+ function mergeExploreStage(stage, overrides) {
91
+ const questions = stage.questions;
92
+ // Legacy string[] format: merge as before
93
+ if (Array.isArray(questions)) {
94
+ return {
95
+ signals: stage.signals,
96
+ questions: mergeList(questions, overrides.questions ?? []),
97
+ };
98
+ }
99
+ // QuestionPool format: merge overrides into pool items
100
+ return {
101
+ signals: stage.signals,
102
+ questions: mergeQuestionPool(questions, overrides.questions ?? []),
103
+ };
104
+ }
105
+ /**
106
+ * 将 override 项合并到 QuestionPool 中。
107
+ *
108
+ * prepend: 在池前面插入新的合成 QuestionPoolItem(priority=5, signals=[])
109
+ * append: 在池末尾追加新的合成 QuestionPoolItem
110
+ * replace: 整段替换池(所有项转为合成信号池项)
111
+ *
112
+ * 返回新的 QuestionPool,不修改原始入参。
113
+ */
114
+ function mergeQuestionPool(pool, overrides) {
115
+ if (overrides.length === 0)
116
+ return pool;
117
+ const prepended = [];
118
+ const appended = [];
119
+ const replaced = [];
120
+ let hasReplace = false;
121
+ for (const item of overrides) {
122
+ if (item.replace !== undefined) {
123
+ replaced.push({ text: item.replace, id: `override-replace-${replaced.length}`, signals: [], priority: 5, requiresAnswer: [] });
124
+ hasReplace = true;
125
+ }
126
+ else if (item.prepend !== undefined) {
127
+ prepended.push({ text: item.prepend, id: `override-prepend-${prepended.length}`, signals: [], priority: 5, requiresAnswer: [] });
128
+ }
129
+ else if (item.append !== undefined) {
130
+ appended.push({ text: item.append, id: `override-append-${appended.length}`, signals: [], priority: 5, requiresAnswer: [] });
131
+ }
132
+ }
133
+ const allItems = hasReplace
134
+ ? replaced
135
+ : [...prepended, ...pool.items, ...appended];
136
+ return {
137
+ items: allItems,
138
+ defaultCount: pool.defaultCount,
139
+ };
140
+ }
141
+ function mergeStage(stage, overrides) {
142
+ const result = { ...stage };
143
+ if (overrides.checklist && Array.isArray(stage.checklist)) {
144
+ result.checklist = mergeList(stage.checklist, overrides.checklist);
145
+ }
146
+ if (overrides.focusAreas && Array.isArray(stage.focusAreas)) {
147
+ result.focusAreas = mergeList(stage.focusAreas, overrides.focusAreas);
148
+ }
149
+ if (overrides.antiPatterns && Array.isArray(stage.antiPatterns)) {
150
+ result.antiPatterns = mergeList(stage.antiPatterns, overrides.antiPatterns);
151
+ }
152
+ if (overrides.patterns && stage.patterns && typeof stage.patterns === 'object') {
153
+ result.patterns = {
154
+ ...stage.patterns,
155
+ ...overrides.patterns,
156
+ };
157
+ }
158
+ return result;
159
+ }
160
+ function mergeList(defaults, overrides) {
161
+ const replaced = [];
162
+ let hasReplace = false;
163
+ for (const item of overrides) {
164
+ if (item.replace !== undefined) {
165
+ replaced.push(item.replace);
166
+ hasReplace = true;
167
+ }
168
+ }
169
+ const ordered = hasReplace ? replaced : rebuildWithAnchors(defaults, overrides);
170
+ // 去重:按出现顺序保留首次 (取同完全字符串相等)
171
+ const seen = new Set();
172
+ const out = [];
173
+ for (const s of ordered) {
174
+ if (seen.has(s))
175
+ continue;
176
+ seen.add(s);
177
+ out.push(s);
178
+ }
179
+ return out;
180
+ }
181
+ function rebuildWithAnchors(defaults, overrides) {
182
+ const prepended = [];
183
+ const appended = [];
184
+ for (const item of overrides) {
185
+ if (item.prepend !== undefined) {
186
+ prepended.push(item.prepend);
187
+ }
188
+ else if (item.append !== undefined) {
189
+ appended.push(item.append);
190
+ }
191
+ }
192
+ return [...prepended, ...defaults, ...appended];
193
+ }
194
+ // ─── scoreDomains (pure) ─────────────────────────────────────────
195
+ /** 匹配阈值:低于此分数的领域视为不相关 */
196
+ const MATCH_THRESHOLD = 0.05;
197
+ /** 默认返回的领域数量上限 */
198
+ const DEFAULT_MAX_DOMAINS = 3;
199
+ /**
200
+ * 纯函数:对任意领域列表计算匹配分数。
201
+ *
202
+ * 与 matchDomains 的区别:接受显式 domains 参数,不依赖全局 ALL_DOMAINS。
203
+ * 导出让测试可以用独立的多领域 registry 验证排序、top-N、零匹配等行为。
204
+ *
205
+ * @param input - 用户输入文本
206
+ * @param domains - 领域模块列表
207
+ * @param options - 匹配选项;maxDomains 为返回数量上限(默认 3;0 = 不限)
208
+ * @returns 匹配的领域列表,按相关性降序,含分数和原因
209
+ */
210
+ export function scoreDomains(input, domains, options = {}) {
211
+ const maxDomains = typeof options === 'number'
212
+ ? options
213
+ : options.maxDomains ?? DEFAULT_MAX_DOMAINS;
214
+ const limit = maxDomains > 0 ? maxDomains : domains.length;
215
+ if (!input || input.trim().length === 0) {
216
+ return domains.slice(0, limit).map((d) => ({
217
+ name: d.name,
218
+ score: 0,
219
+ reason: 'Empty input — showing available domains',
220
+ }));
221
+ }
222
+ const lowerInput = input.toLowerCase();
223
+ const tokens = tokenize(lowerInput);
224
+ const scored = domains.map((domain) => {
225
+ const signals = domain.explore?.signals ?? [];
226
+ if (signals.length === 0) {
227
+ return { domain, score: 0, matchedSignals: [] };
228
+ }
229
+ const matchedSignals = [];
230
+ const hits = signals.filter((signal) => {
231
+ const matched = signalMatchesToken(signal, lowerInput, tokens);
232
+ if (matched) {
233
+ matchedSignals.push(signal);
234
+ }
235
+ return matched;
236
+ }).length;
237
+ const score = hits / Math.sqrt(signals.length);
238
+ return { domain, score, matchedSignals };
239
+ });
240
+ const matched = scored
241
+ .filter((s) => s.score >= MATCH_THRESHOLD)
242
+ .sort((a, b) => b.score - a.score);
243
+ if (matched.length > 0) {
244
+ return matched.slice(0, limit).map((s) => ({
245
+ name: s.domain.name,
246
+ score: Math.round(s.score * 1000) / 1000,
247
+ reason: s.matchedSignals.length > 0
248
+ ? `Matched ${s.matchedSignals.length} signal${s.matchedSignals.length > 1 ? 's' : ''}: ${s.matchedSignals.slice(0, 5).join(', ')}`
249
+ : `Low relevance match (score: ${Math.round(s.score * 1000) / 1000})`,
250
+ }));
251
+ }
252
+ return [];
253
+ }
254
+ // ─── Helpers ───────────────────────────────────────────────────
255
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domains/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAO9H,kEAAkE;AAElE,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;CACf,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,kEAAkE;AAElE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,SAAsC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAiB,EAAE,GAAG,MAAM,EAAE,CAAC;IAE3C,IAAI,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,GAAG,UAAU,CACxB,MAAM,CAAC,MAA4C,EACnD,SAAS,CAAC,MAAM,CACiC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,SAAS,GAAG,UAAU,CAC3B,MAAM,CAAC,SAA+C,EACtD,SAAS,CAAC,SAAS,CACiC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,GAAG,UAAU,CACxB,MAAM,CAAC,MAA4C,EACnD,SAAS,CAAC,MAAM,CACiC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kEAAkE;AAElE,SAAS,iBAAiB,CACxB,KAA2C,EAC3C,SAAyB;IAEzB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,0CAA0C;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;SAC3D,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;KACnE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CACxB,IAAkB,EAClB,SAAyB;IAEzB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,oBAAoB,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/H,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,oBAAoB,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QACnI,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,mBAAmB,QAAQ,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC;IAE/C,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAA8B,EAC9B,SAAyB;IAEzB,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAE5B,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,SAAS,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/E,MAAM,CAAC,QAAQ,GAAG;YAChB,GAAI,KAAK,CAAC,QAAmC;YAC7C,GAAG,SAAS,CAAC,QAAQ;SACtB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAChB,QAAkB,EAClB,SAAyB;IAEzB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChF,2BAA2B;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAkB,EAAE,SAAyB;IACvE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,oEAAoE;AAEpE,yBAAyB;AACzB,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,kBAAkB;AAClB,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,OAAuB,EACvB,UAAwC,EAAE;IAE1C,MAAM,UAAU,GACd,OAAO,OAAO,KAAK,QAAQ;QACzB,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAE3D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,yCAAyC;SAClD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,EAAc,EAAE,CAAC;QAC9D,CAAC;QAED,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC/D,IAAI,OAAO,EAAE,CAAC;gBACZ,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC,MAAM,CAAC;QAEV,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;YACxC,MAAM,EACJ,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,MAAM,UAAU,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClI,CAAC,CAAC,+BAA+B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG;SAC1E,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,kEAAkE"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Operations Domain Module
3
+ *
4
+ * 来源:
5
+ * - content/skills/release-management/SKILL.md (49 行)
6
+ * 发布工作流、release notes、freeze gate、guardrails
7
+ * - content/skills/git-commit-and-pr/SKILL.md (46 行)
8
+ * 提交边界、commit message、PR body checklist
9
+ * - content/skills/documentation-writer/SKILL.md (47 行)
10
+ * README 默认结构、写作规则、guardrails
11
+ * - content/skills/dependency-upgrade/SKILL.md (45 行)
12
+ * 依赖升级分级 (patch/minor/major)、影响面、验证
13
+ * - content/skills/monorepo-management/SKILL.md (72 行)
14
+ * 工具矩阵 (turbo/nx/pnpm/lerna/bazel)、构建编排、发布
15
+ * - content/roles/06-developer-experience/devops-engineer.toml (43 行)
16
+ * CI/CD 管线、容器、IaC、监控、SRE 原则
17
+ * - content/roles/06-developer-experience/documentation-engineer.toml (42 行)
18
+ * 文档作为开发者生产力工程;与代码同步、可执行示例
19
+ *
20
+ * 压缩方法:
21
+ * 1. 7 个源文件的 "Use this skill when" 触发场景 → explore.signals
22
+ * 2. release freeze gate + PR checklist + README checklist → design.checklist
23
+ * 3. monorepo 工具矩阵 → design.patterns
24
+ * 4. devops-engineer principles + dependency-upgrade core workflow → implement.focusAreas
25
+ * 5. 7 个源文件的 guardrails → implement.antiPatterns
26
+ * 6. release notes checklist + monorepo health checks → verify.checklist
27
+ * 7. 原始示例代码 / dockerfile 模板 / 工具脚本 → 丢弃
28
+ *
29
+ * 与相邻领域的边界:
30
+ * - "rollback" / "release" / "deploy" / "ci" 归 operations
31
+ * - "database migration rollback" 归 backend;operations 只覆盖发布层 rollback
32
+ * - "monitoring" 通用监控归 operations;backend 关注 metrics 端点实现
33
+ * - "breaking change" 在 architecture 用于契约层;operations 用 "release breaking change" 多词
34
+ */
35
+ import type { DomainModule } from './types.js';
36
+ export declare const operationsDomain: DomainModule;
37
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/domains/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,gBAAgB,EAAE,YAuV9B,CAAC"}