@dev-guard/core 0.1.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.
- package/LICENSE +21 -0
- package/dist/ai.d.ts +30 -0
- package/dist/ai.js +2050 -0
- package/dist/ai.js.map +1 -0
- package/dist/analyze.d.ts +2 -0
- package/dist/analyze.js +303 -0
- package/dist/analyze.js.map +1 -0
- package/dist/completion.d.ts +8 -0
- package/dist/completion.js +272 -0
- package/dist/completion.js.map +1 -0
- package/dist/context-files.d.ts +5 -0
- package/dist/context-files.js +44 -0
- package/dist/context-files.js.map +1 -0
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +46 -0
- package/dist/defaults.js.map +1 -0
- package/dist/diff-intent.d.ts +19 -0
- package/dist/diff-intent.js +517 -0
- package/dist/diff-intent.js.map +1 -0
- package/dist/drift.d.ts +19 -0
- package/dist/drift.js +264 -0
- package/dist/drift.js.map +1 -0
- package/dist/index-check.mjs +13 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/prompt.d.ts +2 -0
- package/dist/prompt.js +633 -0
- package/dist/prompt.js.map +1 -0
- package/dist/report.d.ts +2 -0
- package/dist/report.js +90 -0
- package/dist/report.js.map +1 -0
- package/dist/review.d.ts +4 -0
- package/dist/review.js +350 -0
- package/dist/review.js.map +1 -0
- package/dist/scan.d.ts +9 -0
- package/dist/scan.js +322 -0
- package/dist/scan.js.map +1 -0
- package/dist/task-anchor.d.ts +21 -0
- package/dist/task-anchor.js +126 -0
- package/dist/task-anchor.js.map +1 -0
- package/dist/task-router.d.ts +3 -0
- package/dist/task-router.js +340 -0
- package/dist/task-router.js.map +1 -0
- package/dist/templates.d.ts +20 -0
- package/dist/templates.js +56 -0
- package/dist/templates.js.map +1 -0
- package/dist/types.d.ts +366 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/update.d.ts +2 -0
- package/dist/update.js +250 -0
- package/dist/update.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
const rules = [
|
|
2
|
+
{
|
|
3
|
+
type: "i18n",
|
|
4
|
+
strategy: "structure-first",
|
|
5
|
+
riskLevel: "high",
|
|
6
|
+
requiresPhasing: true,
|
|
7
|
+
patterns: [/영어\s*변환|영문\s*변환|영어\s*버전|영문\s*버전|영어.*지원|영문.*지원|전체\s*영어|전체.*영문|영문.*추가|다국어|i18n|locali[sz]ation|locale|translation|언어\s*(전환|설정|지원)|language\s*(setting|switch|support)/i]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
type: "infra_config",
|
|
11
|
+
strategy: "config-first",
|
|
12
|
+
riskLevel: "high",
|
|
13
|
+
requiresPhasing: false,
|
|
14
|
+
patterns: [/환경\s*변수|env|deploy|배포|config|설정\s*파일|build\s*설정|ci|workflow|docker|vercel|netlify|supabase.*배포|배포.*supabase/i]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: "migration",
|
|
18
|
+
strategy: "phased-migration",
|
|
19
|
+
riskLevel: "high",
|
|
20
|
+
requiresPhasing: true,
|
|
21
|
+
patterns: [/migration|마이그레이션|전환|업그레이드|버전\s*업|교체|이관|backward compatibility|호환/i]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: "architecture",
|
|
25
|
+
strategy: "design-first-phased",
|
|
26
|
+
riskLevel: "high",
|
|
27
|
+
requiresPhasing: true,
|
|
28
|
+
patterns: [/아키텍처|architecture|구조\s*설계|구조\s*도입|전체\s*구조|전역\s*구조|기반\s*구조|provider\s*구조|시스템\s*도입/i]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: "performance",
|
|
32
|
+
strategy: "measure-first",
|
|
33
|
+
riskLevel: "medium",
|
|
34
|
+
requiresPhasing: false,
|
|
35
|
+
patterns: [/느림|느려|로딩|성능|performance|최적화|지연|버벅|렌더링.*오래|속도/i]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
type: "bugfix",
|
|
39
|
+
strategy: "reproduce-and-fix",
|
|
40
|
+
riskLevel: "medium",
|
|
41
|
+
requiresPhasing: false,
|
|
42
|
+
patterns: [/오류|에러|버그|bug|fix|깨짐|동작하지|실패|안\s*됨|문제\s*해결|잘못|문제.*바뀌|다른.*바뀌|원래.*아니|유지.*안|바뀜/i]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: "docs",
|
|
46
|
+
strategy: "docs-only",
|
|
47
|
+
riskLevel: "low",
|
|
48
|
+
requiresPhasing: false,
|
|
49
|
+
patterns: [/readme|문서|docs?|가이드|사용법|설명서|changelog|릴리즈\s*노트/i]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: "refactor",
|
|
53
|
+
strategy: "behavior-preserving",
|
|
54
|
+
riskLevel: "medium",
|
|
55
|
+
requiresPhasing: false,
|
|
56
|
+
patterns: [/refactor|리팩터|리팩토|정리|중복\s*제거|구조\s*개선|cleanup|clean\s*up/i]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: "ui_feature_polish",
|
|
60
|
+
strategy: "scoped-ui-change",
|
|
61
|
+
riskLevel: "medium",
|
|
62
|
+
requiresPhasing: false,
|
|
63
|
+
patterns: [
|
|
64
|
+
/(문구|텍스트|단어|표현|copy|wording|카피|어색).*(기능도\s*있어야|볼\s*수\s*있|전체\s*보기|전체를\s*볼|누르면|눌렀을\s*때|열기|열리|펼치기|목록\s*보기|상세\s*보기|모달|바텀시트|bottom\s*sheet|sheet|expand|더보기)/i,
|
|
65
|
+
/(기능도\s*있어야|볼\s*수\s*있|전체\s*보기|전체를\s*볼|누르면|눌렀을\s*때|클릭|열기|열리|펼치기|목록\s*보기|상세\s*보기|모달|바텀시트|bottom\s*sheet|sheet|expand|더보기)/i
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: "ui_text_cleanup",
|
|
70
|
+
strategy: "copy-only",
|
|
71
|
+
riskLevel: "low",
|
|
72
|
+
requiresPhasing: false,
|
|
73
|
+
patterns: [/문구|텍스트|단어|표현|copy|wording|마이크로카피|어색한\s*단어|의미가\s*불분명/i]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: "ui_polish",
|
|
77
|
+
strategy: "minimal-ui-polish",
|
|
78
|
+
riskLevel: "low",
|
|
79
|
+
requiresPhasing: false,
|
|
80
|
+
patterns: [
|
|
81
|
+
/자연스럽|부자연|어색|뜬금|위화감|시각적\s*위계|배치|더\s*매끄럽|다듬|polish|ux|ui/i,
|
|
82
|
+
/(명령|command).*(출력|output|요약|summary)|출력.*(명확|요약|정리)|요약.*(명확|보여)|더\s*명확|명확하게|help|status|done|preview/i
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: "styling",
|
|
87
|
+
strategy: "style-token-first",
|
|
88
|
+
riskLevel: "low",
|
|
89
|
+
requiresPhasing: false,
|
|
90
|
+
patterns: [/스타일|css|색상|다크모드|dark\s*mode|라이트|theme|테마|spacing|margin|padding|font|폰트/i]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: "product_strategy",
|
|
94
|
+
strategy: "discovery-first",
|
|
95
|
+
riskLevel: "high",
|
|
96
|
+
requiresPhasing: true,
|
|
97
|
+
patterns: [
|
|
98
|
+
/꼭\s*해야\s*할\s*이유|왜\s*써야|왜\s*해야|재미|유행|바이럴|공유하고\s*싶|다시\s*하고\s*싶|차별화|후킹|리텐션|매력|컨셉|포지셔닝|한\s*방|밈|친구에게\s*보내고\s*싶|심심|지루|공유.*느낌|이유.*모르|해야.*이유/i
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: "feature_add",
|
|
103
|
+
strategy: "scope-first",
|
|
104
|
+
riskLevel: "medium",
|
|
105
|
+
requiresPhasing: false,
|
|
106
|
+
patterns: [/추가|구현|만들|생성|지원|기능|버튼|페이지|flow|플로우/i]
|
|
107
|
+
}
|
|
108
|
+
];
|
|
109
|
+
export function classifyTaskType(requirement) {
|
|
110
|
+
const normalized = requirement.trim();
|
|
111
|
+
const scored = rules
|
|
112
|
+
.map((rule) => {
|
|
113
|
+
const matched = rule.patterns.filter((pattern) => pattern.test(normalized));
|
|
114
|
+
return {
|
|
115
|
+
rule,
|
|
116
|
+
score: matched.length,
|
|
117
|
+
reasons: matched.map((pattern) => `matched ${pattern.source}`)
|
|
118
|
+
};
|
|
119
|
+
})
|
|
120
|
+
.filter((entry) => entry.score > 0)
|
|
121
|
+
.sort((a, b) => b.score - a.score || rulePriority(a.rule.type) - rulePriority(b.rule.type));
|
|
122
|
+
const selected = scored[0];
|
|
123
|
+
if (!selected) {
|
|
124
|
+
return {
|
|
125
|
+
type: "feature_add",
|
|
126
|
+
confidence: "low",
|
|
127
|
+
reasons: ["no specific task type matched; defaulted to feature_add"],
|
|
128
|
+
strategy: "scope-first",
|
|
129
|
+
riskLevel: "medium",
|
|
130
|
+
requiresPhasing: false,
|
|
131
|
+
domainKeywords: extractDomainKeywords(normalized)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const subtype = inferSubtype(selected.rule.type, normalized);
|
|
135
|
+
return {
|
|
136
|
+
type: selected.rule.type,
|
|
137
|
+
subtype,
|
|
138
|
+
confidence: selected.rule.type === "i18n" || selected.rule.type === "product_strategy" || selected.rule.type === "ui_feature_polish" ? "high" : confidenceFromScore(selected.score),
|
|
139
|
+
reasons: [...selected.reasons.slice(0, 4), ...(subtype ? [`subtype ${subtype}`] : [])],
|
|
140
|
+
strategy: selected.rule.strategy,
|
|
141
|
+
riskLevel: selected.rule.riskLevel,
|
|
142
|
+
requiresPhasing: selected.rule.requiresPhasing,
|
|
143
|
+
domainKeywords: extractDomainKeywords(normalized)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function taskTypeStrategyNotes(result) {
|
|
147
|
+
const notes = {
|
|
148
|
+
ui_text_cleanup: [
|
|
149
|
+
"텍스트/문구 수정 중심으로 제한한다.",
|
|
150
|
+
"로직, 상태, 데이터 변경은 금지한다.",
|
|
151
|
+
"수정 대상은 화면/컴포넌트의 copy surface 중심으로 고른다."
|
|
152
|
+
],
|
|
153
|
+
ui_polish: [
|
|
154
|
+
"기존 UI 흐름 안에서 최소 수정한다.",
|
|
155
|
+
"새 섹션, 새 카드, 새 기능 추가를 피한다.",
|
|
156
|
+
"상태/동작 로직은 보호한다."
|
|
157
|
+
],
|
|
158
|
+
ui_feature_polish: [
|
|
159
|
+
"copy-only로 잠그지 않고 scoped UI interaction으로 제한한다.",
|
|
160
|
+
"실제 렌더 경로를 먼저 확인한 뒤 사용 중인 컴포넌트만 최소 수정한다.",
|
|
161
|
+
"클릭 이벤트, local UI state, modal/sheet/inline expand는 허용하되 데이터/API/storage는 보호한다."
|
|
162
|
+
],
|
|
163
|
+
product_strategy: [
|
|
164
|
+
"바로 코드 수정하지 않고 product brief를 먼저 정의한다.",
|
|
165
|
+
"가치, 후킹, 공유 이유, 유지 이유를 구현 범위보다 먼저 정리한다.",
|
|
166
|
+
"관련 파일은 reference로만 보고 직접 수정 대상은 승인 전까지 비운다."
|
|
167
|
+
],
|
|
168
|
+
bugfix: [
|
|
169
|
+
"재현 조건, 원인 후보, 검증 방법을 포함한다.",
|
|
170
|
+
"관련 로직 파일을 우선한다.",
|
|
171
|
+
"기존 정상 동작을 보호한다."
|
|
172
|
+
],
|
|
173
|
+
feature_add: [
|
|
174
|
+
"새 기능 범위를 명확히 한다.",
|
|
175
|
+
"UI, 상태, 데이터 영향을 구분한다.",
|
|
176
|
+
"보호 대상을 명시한다."
|
|
177
|
+
],
|
|
178
|
+
architecture: [
|
|
179
|
+
"바로 전체 수정하지 않고 단계 분해한다.",
|
|
180
|
+
"영향 범위와 마이그레이션 위험을 명시한다.",
|
|
181
|
+
"이번 단계에서 제외할 것을 명확히 한다."
|
|
182
|
+
],
|
|
183
|
+
i18n: [
|
|
184
|
+
"기존 언어를 유지한다.",
|
|
185
|
+
"언어 리소스, 설정, provider 구조를 우선한다.",
|
|
186
|
+
"전체 페이지 직접 번역을 금지하고 샘플 적용만 1차 범위로 제한한다."
|
|
187
|
+
],
|
|
188
|
+
refactor: [
|
|
189
|
+
"동작 변경을 금지한다.",
|
|
190
|
+
"public API와 컴포넌트 props를 보호한다.",
|
|
191
|
+
"테스트와 빌드를 필수 검증으로 둔다."
|
|
192
|
+
],
|
|
193
|
+
migration: [
|
|
194
|
+
"단계별 전환으로 나눈다.",
|
|
195
|
+
"backward compatibility를 보호한다.",
|
|
196
|
+
"rollback point를 명시한다."
|
|
197
|
+
],
|
|
198
|
+
performance: [
|
|
199
|
+
"측정 기준과 대상을 명시한다.",
|
|
200
|
+
"기능 변경을 금지한다.",
|
|
201
|
+
"과한 리팩토링을 피한다."
|
|
202
|
+
],
|
|
203
|
+
styling: [
|
|
204
|
+
"스타일/UI 표현 중심으로 제한한다.",
|
|
205
|
+
"로직을 보호한다.",
|
|
206
|
+
"디자인 시스템 토큰을 우선한다."
|
|
207
|
+
],
|
|
208
|
+
docs: [
|
|
209
|
+
"문서만 수정한다.",
|
|
210
|
+
"코드 변경을 금지한다.",
|
|
211
|
+
"README/docs 변경으로 범위를 제한한다."
|
|
212
|
+
],
|
|
213
|
+
infra_config: [
|
|
214
|
+
"config/env/build/deploy 영향을 명시한다.",
|
|
215
|
+
"secrets 저장을 금지한다.",
|
|
216
|
+
"공식 문서 확인 필요를 표시한다."
|
|
217
|
+
]
|
|
218
|
+
};
|
|
219
|
+
return notes[result.type];
|
|
220
|
+
}
|
|
221
|
+
function confidenceFromScore(score) {
|
|
222
|
+
if (score >= 2) {
|
|
223
|
+
return "high";
|
|
224
|
+
}
|
|
225
|
+
return "medium";
|
|
226
|
+
}
|
|
227
|
+
function rulePriority(type) {
|
|
228
|
+
const order = [
|
|
229
|
+
"i18n",
|
|
230
|
+
"infra_config",
|
|
231
|
+
"migration",
|
|
232
|
+
"architecture",
|
|
233
|
+
"performance",
|
|
234
|
+
"bugfix",
|
|
235
|
+
"docs",
|
|
236
|
+
"ui_feature_polish",
|
|
237
|
+
"ui_text_cleanup",
|
|
238
|
+
"ui_polish",
|
|
239
|
+
"product_strategy",
|
|
240
|
+
"styling",
|
|
241
|
+
"refactor",
|
|
242
|
+
"feature_add"
|
|
243
|
+
];
|
|
244
|
+
return order.indexOf(type);
|
|
245
|
+
}
|
|
246
|
+
function inferSubtype(type, requirement) {
|
|
247
|
+
if (type === "bugfix") {
|
|
248
|
+
if (/(이전|뒤로|돌아가|previous|prev|back|navigation|navigate|router|history|질문|문제|question|state|상태|유지|바뀌|변경됨)/i.test(requirement)) {
|
|
249
|
+
return "bugfix.navigation_state";
|
|
250
|
+
}
|
|
251
|
+
if (/(저장|복원|localstorage|sessionstorage|persist|persistence|cache|캐시)/i.test(requirement)) {
|
|
252
|
+
return "bugfix.data_persistence";
|
|
253
|
+
}
|
|
254
|
+
if (/(렌더|표시|보이지|깨짐|화면|ui|layout|레이아웃)/i.test(requirement)) {
|
|
255
|
+
return "bugfix.ui_rendering";
|
|
256
|
+
}
|
|
257
|
+
if (/(문구|텍스트|단어|표현|copy|wording)/i.test(requirement)) {
|
|
258
|
+
return "bugfix.text_content";
|
|
259
|
+
}
|
|
260
|
+
if (/(api|fetch|request|response|서버|요청|응답|네트워크|network)/i.test(requirement)) {
|
|
261
|
+
return "bugfix.api_error";
|
|
262
|
+
}
|
|
263
|
+
if (/(build|빌드|compile|컴파일|type error|타입 에러|lint)/i.test(requirement)) {
|
|
264
|
+
return "bugfix.build_error";
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (type === "ui_text_cleanup") {
|
|
268
|
+
return "ui_text_cleanup.wording";
|
|
269
|
+
}
|
|
270
|
+
if (type === "ui_feature_polish") {
|
|
271
|
+
const subtypes = new Set();
|
|
272
|
+
if (/(문구|텍스트|단어|표현|copy|wording|카피|어색|걷어내|제거)/i.test(requirement)) {
|
|
273
|
+
subtypes.add("wording_cleanup");
|
|
274
|
+
}
|
|
275
|
+
if (/(메모|memo).*(전체|목록|보기|볼 수)|생각들|thought/i.test(requirement)) {
|
|
276
|
+
subtypes.add("memo_list_view");
|
|
277
|
+
}
|
|
278
|
+
if (/(카드|card).*(누르면|클릭|우측|상단|숫자|개)/i.test(requirement)) {
|
|
279
|
+
subtypes.add("card_interaction");
|
|
280
|
+
}
|
|
281
|
+
if (/(상세|detail)/i.test(requirement)) {
|
|
282
|
+
subtypes.add("detail_view");
|
|
283
|
+
}
|
|
284
|
+
if (/(펼치|expand|더보기|열리|열기|모달|바텀시트|sheet)/i.test(requirement)) {
|
|
285
|
+
subtypes.add("expand_view");
|
|
286
|
+
}
|
|
287
|
+
return subtypes.size > 0 ? [...subtypes].join("+") : "card_interaction";
|
|
288
|
+
}
|
|
289
|
+
if (type === "ui_polish") {
|
|
290
|
+
if (/(명령|command|출력|output|요약|summary|help|status|done|preview|watch|review|check|task-ai|prompt|doctor|update)/i.test(requirement)) {
|
|
291
|
+
return "cli_output_polish";
|
|
292
|
+
}
|
|
293
|
+
return "ui_polish.integration";
|
|
294
|
+
}
|
|
295
|
+
if (type === "product_strategy") {
|
|
296
|
+
if (/(바이럴|공유하고 싶|친구에게 보내고 싶|공유성|공유.*느낌|share|viral)/i.test(requirement)) {
|
|
297
|
+
return "viral_loop";
|
|
298
|
+
}
|
|
299
|
+
if (/(다시 하고 싶|리텐션|retention|재방문|습관)/i.test(requirement)) {
|
|
300
|
+
return "retention_hook";
|
|
301
|
+
}
|
|
302
|
+
if (/(검증|validation|concept|컨셉)/i.test(requirement)) {
|
|
303
|
+
return "concept_validation";
|
|
304
|
+
}
|
|
305
|
+
if (/(문구|copy|카피|표현|메시지)/i.test(requirement)) {
|
|
306
|
+
return "product_copy";
|
|
307
|
+
}
|
|
308
|
+
if (/(재미|유행|밈|한 방|심심|지루|fun)/i.test(requirement)) {
|
|
309
|
+
return "fun_factor";
|
|
310
|
+
}
|
|
311
|
+
if (/(결과.*심심|결과.*지루|결과|result)/i.test(requirement)) {
|
|
312
|
+
return "result_shareability";
|
|
313
|
+
}
|
|
314
|
+
return "engagement_positioning";
|
|
315
|
+
}
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
function extractDomainKeywords(requirement) {
|
|
319
|
+
const mappings = [
|
|
320
|
+
[/(이전|뒤로|돌아가|previous|prev|back)/i, ["previous", "back", "navigation"]],
|
|
321
|
+
[/(질문|문제|question)/i, ["question"]],
|
|
322
|
+
[/(상태|state|유지|바뀌|변경됨)/i, ["state"]],
|
|
323
|
+
[/(결과|result)/i, ["result"]],
|
|
324
|
+
[/(문구|텍스트|단어|표현|copy|wording)/i, ["text", "wording"]],
|
|
325
|
+
[/(brain|생각|메모|memo|thought)/i, ["brain-ui", "ui-interaction"]],
|
|
326
|
+
[/(카드|card|누르면|클릭|전체 보기|목록|상세|모달|바텀시트|펼치|열리|열기)/i, ["ui-interaction"]],
|
|
327
|
+
[/(재미|유행|바이럴|공유하고\s*싶|다시\s*하고\s*싶|차별화|후킹|리텐션|매력|컨셉|포지셔닝|밈)/i, ["product", "engagement", "positioning"]],
|
|
328
|
+
[/(영어|영문|다국어|i18n|locale|translation|언어)/i, ["i18n", "locale"]],
|
|
329
|
+
[/(auth|login|로그인|인증)/i, ["auth"]],
|
|
330
|
+
[/(api|fetch|서버|요청|응답)/i, ["api"]]
|
|
331
|
+
];
|
|
332
|
+
const keywords = new Set();
|
|
333
|
+
for (const [pattern, values] of mappings) {
|
|
334
|
+
if (pattern.test(requirement)) {
|
|
335
|
+
values.forEach((value) => keywords.add(value));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return [...keywords];
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=task-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-router.js","sourceRoot":"","sources":["../src/task-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const configTemplate: {
|
|
2
|
+
allowedPaths: never[];
|
|
3
|
+
protectedPaths: string[];
|
|
4
|
+
docPaths: string[];
|
|
5
|
+
sourcePaths: string[];
|
|
6
|
+
docsRequiredFor: string[];
|
|
7
|
+
ai: {
|
|
8
|
+
provider: string;
|
|
9
|
+
model: string;
|
|
10
|
+
temperature: number;
|
|
11
|
+
maxTokens: number;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare const taskTemplate = "# Current Task\n\nDescribe the exact request scope before running AI/Codex work.\n\n## Goal\n- \n\n## Allowed Paths\n- \n\n## Out of Scope\n- \n";
|
|
15
|
+
export declare const rulesTemplate = "# Dev Guard Rules\n\n- Keep changes inside the current task scope.\n- Avoid unrelated formatting churn.\n- Do not modify protected or deployment paths unless the task explicitly asks for it.\n- Update project docs when behavior, architecture, setup, or decisions change.\n";
|
|
16
|
+
export declare const mistakesTemplate = "# Mistakes To Avoid\n\n- Expanding the task into unrelated refactors.\n- Changing files that were already working without a task reason.\n- Forgetting to update docs after changing project behavior or setup.\n";
|
|
17
|
+
export declare const projectStateTemplate = "# Project State\n\nDocument the current stable project shape, setup, and known constraints.\n";
|
|
18
|
+
export declare const currentTaskTemplate = "# Current Task\n\nMirror the active .devguard/task.md in a human-readable project doc when useful.\n";
|
|
19
|
+
export declare const decisionsTemplate = "# Decisions\n\nRecord important technical decisions and why they were made.\n";
|
|
20
|
+
export declare const doNotRepeatTemplate = "# Do Not Repeat\n\nRecord mistakes, regressions, and patterns that should not be repeated.\n";
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export const configTemplate = {
|
|
2
|
+
allowedPaths: [],
|
|
3
|
+
protectedPaths: ["pnpm-lock.yaml", ".github/", "infra/", "scripts/deploy"],
|
|
4
|
+
docPaths: ["README.md", "docs/PROJECT_STATE.md", "docs/CURRENT_TASK.md", "docs/DECISIONS.md", "docs/DO_NOT_REPEAT.md"],
|
|
5
|
+
sourcePaths: ["packages/", "src/", "apps/", "lib/", "components/"],
|
|
6
|
+
docsRequiredFor: ["package.json", "pnpm-workspace.yaml", "tsconfig", "packages/", "src/", "apps/"],
|
|
7
|
+
ai: {
|
|
8
|
+
provider: "none",
|
|
9
|
+
model: "gpt-4o-mini",
|
|
10
|
+
temperature: 0.2,
|
|
11
|
+
maxTokens: 4000
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
export const taskTemplate = `# Current Task
|
|
15
|
+
|
|
16
|
+
Describe the exact request scope before running AI/Codex work.
|
|
17
|
+
|
|
18
|
+
## Goal
|
|
19
|
+
-
|
|
20
|
+
|
|
21
|
+
## Allowed Paths
|
|
22
|
+
-
|
|
23
|
+
|
|
24
|
+
## Out of Scope
|
|
25
|
+
-
|
|
26
|
+
`;
|
|
27
|
+
export const rulesTemplate = `# Dev Guard Rules
|
|
28
|
+
|
|
29
|
+
- Keep changes inside the current task scope.
|
|
30
|
+
- Avoid unrelated formatting churn.
|
|
31
|
+
- Do not modify protected or deployment paths unless the task explicitly asks for it.
|
|
32
|
+
- Update project docs when behavior, architecture, setup, or decisions change.
|
|
33
|
+
`;
|
|
34
|
+
export const mistakesTemplate = `# Mistakes To Avoid
|
|
35
|
+
|
|
36
|
+
- Expanding the task into unrelated refactors.
|
|
37
|
+
- Changing files that were already working without a task reason.
|
|
38
|
+
- Forgetting to update docs after changing project behavior or setup.
|
|
39
|
+
`;
|
|
40
|
+
export const projectStateTemplate = `# Project State
|
|
41
|
+
|
|
42
|
+
Document the current stable project shape, setup, and known constraints.
|
|
43
|
+
`;
|
|
44
|
+
export const currentTaskTemplate = `# Current Task
|
|
45
|
+
|
|
46
|
+
Mirror the active .devguard/task.md in a human-readable project doc when useful.
|
|
47
|
+
`;
|
|
48
|
+
export const decisionsTemplate = `# Decisions
|
|
49
|
+
|
|
50
|
+
Record important technical decisions and why they were made.
|
|
51
|
+
`;
|
|
52
|
+
export const doNotRepeatTemplate = `# Do Not Repeat
|
|
53
|
+
|
|
54
|
+
Record mistakes, regressions, and patterns that should not be repeated.
|
|
55
|
+
`;
|
|
56
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,EAAE;IAChB,cAAc,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC;IAC1E,QAAQ,EAAE,CAAC,WAAW,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,CAAC;IACtH,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;IAClE,eAAe,EAAE,CAAC,cAAc,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;IAClG,EAAE,EAAE;QACF,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;KAChB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;CAY3B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;CAM5B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;CAK/B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;CAGnC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;CAGlC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;CAGhC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;CAGlC,CAAC"}
|