@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
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
export type Severity = "info" | "warning";
|
|
2
|
+
export interface DevGuardConfig {
|
|
3
|
+
allowedPaths?: string[];
|
|
4
|
+
protectedPaths?: string[];
|
|
5
|
+
docPaths?: string[];
|
|
6
|
+
sourcePaths?: string[];
|
|
7
|
+
docsRequiredFor?: string[];
|
|
8
|
+
riskIgnoredPaths?: string[];
|
|
9
|
+
ai?: AIConfig;
|
|
10
|
+
}
|
|
11
|
+
export interface ProjectIdentity {
|
|
12
|
+
root: string;
|
|
13
|
+
gitRemoteOrigin?: string;
|
|
14
|
+
packageName?: string;
|
|
15
|
+
frameworkKeywords: string[];
|
|
16
|
+
fingerprint: string;
|
|
17
|
+
}
|
|
18
|
+
export type AIProviderName = "none" | "openai";
|
|
19
|
+
export interface AIConfig {
|
|
20
|
+
provider?: AIProviderName;
|
|
21
|
+
model?: string;
|
|
22
|
+
temperature?: number;
|
|
23
|
+
maxTokens?: number;
|
|
24
|
+
reasoningEffort?: string;
|
|
25
|
+
baseURL?: string;
|
|
26
|
+
}
|
|
27
|
+
export type ChangeFileStatus = "modified" | "added" | "deleted" | "renamed" | "untracked" | "staged";
|
|
28
|
+
export type ChangeFileSource = "workingTree" | "staged" | "untracked";
|
|
29
|
+
export interface ChangeFile {
|
|
30
|
+
path: string;
|
|
31
|
+
status: ChangeFileStatus;
|
|
32
|
+
source: ChangeFileSource;
|
|
33
|
+
oldPath?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DiffInput {
|
|
36
|
+
changedFiles: string[];
|
|
37
|
+
changeFiles?: ChangeFile[];
|
|
38
|
+
diffText: string;
|
|
39
|
+
taskText: string;
|
|
40
|
+
rulesText: string;
|
|
41
|
+
config?: DevGuardConfig;
|
|
42
|
+
includeContextFiles?: boolean;
|
|
43
|
+
codeGraph?: CodeGraphEntry[];
|
|
44
|
+
}
|
|
45
|
+
export interface GuardFinding {
|
|
46
|
+
severity: Severity;
|
|
47
|
+
code: string;
|
|
48
|
+
title: string;
|
|
49
|
+
message: string;
|
|
50
|
+
files?: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface GuardReport {
|
|
53
|
+
changedFiles: string[];
|
|
54
|
+
changeFiles: ChangeFile[];
|
|
55
|
+
findings: GuardFinding[];
|
|
56
|
+
docsUpdateNeeded: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface UpdateSuggestionInput {
|
|
59
|
+
changedFiles: string[];
|
|
60
|
+
changeFiles?: ChangeFile[];
|
|
61
|
+
diffText: string;
|
|
62
|
+
taskMarkdown: string;
|
|
63
|
+
rulesMarkdown: string;
|
|
64
|
+
mistakesMarkdown: string;
|
|
65
|
+
includeContextFiles?: boolean;
|
|
66
|
+
runLog?: DevGuardRunLog;
|
|
67
|
+
}
|
|
68
|
+
export interface UpdateSuggestions {
|
|
69
|
+
projectStateSuggestion: string;
|
|
70
|
+
currentTaskSuggestion: string;
|
|
71
|
+
decisionsSuggestion: string;
|
|
72
|
+
doNotRepeatSuggestion: string;
|
|
73
|
+
summary: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CodexPromptInput {
|
|
76
|
+
taskMarkdown: string;
|
|
77
|
+
rulesMarkdown: string;
|
|
78
|
+
mistakesMarkdown: string;
|
|
79
|
+
projectStateMarkdown: string;
|
|
80
|
+
decisionsMarkdown: string;
|
|
81
|
+
changedFiles: string[];
|
|
82
|
+
changeFiles?: ChangeFile[];
|
|
83
|
+
diffText: string;
|
|
84
|
+
compact?: boolean;
|
|
85
|
+
ultraCompact?: boolean;
|
|
86
|
+
density?: "ultra" | "compact" | "verbose";
|
|
87
|
+
maxPromptTokens?: number;
|
|
88
|
+
includeContextFiles?: boolean;
|
|
89
|
+
impactHints?: ImpactHint[];
|
|
90
|
+
}
|
|
91
|
+
export interface CodexPrompt {
|
|
92
|
+
promptText: string;
|
|
93
|
+
summary: string;
|
|
94
|
+
includedSections: string[];
|
|
95
|
+
}
|
|
96
|
+
export interface GenerateTextInput {
|
|
97
|
+
system?: string;
|
|
98
|
+
prompt: string;
|
|
99
|
+
model?: string;
|
|
100
|
+
temperature?: number;
|
|
101
|
+
maxTokens?: number;
|
|
102
|
+
reasoningEffort?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface AIProvider {
|
|
105
|
+
name: AIProviderName;
|
|
106
|
+
generateText(input: GenerateTextInput): Promise<string>;
|
|
107
|
+
}
|
|
108
|
+
export interface TaskAIContext {
|
|
109
|
+
requirement: string;
|
|
110
|
+
rulesMarkdown: string;
|
|
111
|
+
mistakesMarkdown: string;
|
|
112
|
+
projectStateMarkdown: string;
|
|
113
|
+
decisionsMarkdown: string;
|
|
114
|
+
changedFiles: string[];
|
|
115
|
+
changeFiles?: ChangeFile[];
|
|
116
|
+
diffText: string;
|
|
117
|
+
projectFiles?: string[];
|
|
118
|
+
relatedFileCandidates?: string[];
|
|
119
|
+
fileCandidates?: TaskAIFileCandidate[];
|
|
120
|
+
codeContexts?: TaskAICodeContext[];
|
|
121
|
+
taskType?: TaskTypeResult;
|
|
122
|
+
completionCriteria?: TaskCompletionCriteria;
|
|
123
|
+
codeGraph?: CodeGraphEntry[];
|
|
124
|
+
impactHints?: ImpactHint[];
|
|
125
|
+
}
|
|
126
|
+
export interface TaskMarkdownResult {
|
|
127
|
+
markdown: string;
|
|
128
|
+
scopeFilledFromCandidates: boolean;
|
|
129
|
+
}
|
|
130
|
+
export interface TaskAICodeContext {
|
|
131
|
+
path: string;
|
|
132
|
+
matchedKeywords: string[];
|
|
133
|
+
excerpt: string;
|
|
134
|
+
truncated: boolean;
|
|
135
|
+
}
|
|
136
|
+
export type TaskAIFileCandidateRole = "edit" | "reference" | "file-protected" | "logic-protected" | "protected" | "ignored";
|
|
137
|
+
export interface TaskAIFileCandidate {
|
|
138
|
+
path: string;
|
|
139
|
+
score: number;
|
|
140
|
+
reasons: string[];
|
|
141
|
+
negativeReasons: string[];
|
|
142
|
+
role: TaskAIFileCandidateRole;
|
|
143
|
+
}
|
|
144
|
+
export type TaskType = "ui_text_cleanup" | "ui_polish" | "ui_feature_polish" | "bugfix" | "feature_add" | "product_strategy" | "architecture" | "i18n" | "refactor" | "migration" | "performance" | "styling" | "docs" | "infra_config";
|
|
145
|
+
export type TaskTypeConfidence = "low" | "medium" | "high";
|
|
146
|
+
export type TaskRiskLevel = "low" | "medium" | "high";
|
|
147
|
+
export interface TaskTypeResult {
|
|
148
|
+
type: TaskType;
|
|
149
|
+
subtype?: string;
|
|
150
|
+
confidence: TaskTypeConfidence;
|
|
151
|
+
reasons: string[];
|
|
152
|
+
strategy: string;
|
|
153
|
+
riskLevel: TaskRiskLevel;
|
|
154
|
+
requiresPhasing: boolean;
|
|
155
|
+
domainKeywords?: string[];
|
|
156
|
+
}
|
|
157
|
+
export interface ContextPriority {
|
|
158
|
+
requirement: number;
|
|
159
|
+
relatedCode: number;
|
|
160
|
+
taskSubtypeContext: number;
|
|
161
|
+
recentRun: number;
|
|
162
|
+
projectMemory: number;
|
|
163
|
+
staleDocs: number;
|
|
164
|
+
}
|
|
165
|
+
export type DriftSeverity = "low" | "medium" | "high";
|
|
166
|
+
export interface DriftResult {
|
|
167
|
+
driftScore: number;
|
|
168
|
+
severity: DriftSeverity;
|
|
169
|
+
reasons: string[];
|
|
170
|
+
requirementDomains: string[];
|
|
171
|
+
generatedDomains: string[];
|
|
172
|
+
requirementZones: string[];
|
|
173
|
+
generatedZones: string[];
|
|
174
|
+
allowedExpansions: string[];
|
|
175
|
+
similarity: number;
|
|
176
|
+
}
|
|
177
|
+
export interface DriftTelemetry {
|
|
178
|
+
driftType: string;
|
|
179
|
+
severity: DriftSeverity;
|
|
180
|
+
source: string;
|
|
181
|
+
timestamp: number;
|
|
182
|
+
subtype?: string;
|
|
183
|
+
}
|
|
184
|
+
export interface WorkflowQualityScore {
|
|
185
|
+
requirementAlignment: number;
|
|
186
|
+
driftRisk: number;
|
|
187
|
+
scopeSafety: number;
|
|
188
|
+
confidence: number;
|
|
189
|
+
}
|
|
190
|
+
export interface TaskCompletionCriteria {
|
|
191
|
+
requiredChecks: string[];
|
|
192
|
+
forbiddenPatterns?: string[];
|
|
193
|
+
reviewHints?: string[];
|
|
194
|
+
blockingFailures?: string[];
|
|
195
|
+
}
|
|
196
|
+
export type ReviewStatus = "pass" | "info" | "warning" | "needs_changes" | "risky" | "critical" | "unknown";
|
|
197
|
+
export interface ReviewFileContext {
|
|
198
|
+
path: string;
|
|
199
|
+
excerpt: string;
|
|
200
|
+
truncated: boolean;
|
|
201
|
+
}
|
|
202
|
+
export interface ReviewMemorySummary {
|
|
203
|
+
path: string;
|
|
204
|
+
role: string;
|
|
205
|
+
keywords: string[];
|
|
206
|
+
features: string[];
|
|
207
|
+
}
|
|
208
|
+
export interface ReviewContext {
|
|
209
|
+
taskMarkdown: string;
|
|
210
|
+
rulesMarkdown: string;
|
|
211
|
+
mistakesMarkdown: string;
|
|
212
|
+
projectStateMarkdown: string;
|
|
213
|
+
decisionsMarkdown: string;
|
|
214
|
+
changedFiles: string[];
|
|
215
|
+
changeFiles?: ChangeFile[];
|
|
216
|
+
diffText: string;
|
|
217
|
+
untrackedFileContexts?: ReviewFileContext[];
|
|
218
|
+
memorySummaries?: ReviewMemorySummary[];
|
|
219
|
+
projectMapMarkdown?: string;
|
|
220
|
+
runLog?: DevGuardRunLog;
|
|
221
|
+
runSelectionSummary?: string;
|
|
222
|
+
impactHints?: ImpactHint[];
|
|
223
|
+
}
|
|
224
|
+
export interface ReviewResult {
|
|
225
|
+
markdown: string;
|
|
226
|
+
status: ReviewStatus;
|
|
227
|
+
fixPrompt: string;
|
|
228
|
+
}
|
|
229
|
+
export interface ReviewFixPromptInput {
|
|
230
|
+
review: ReviewResult;
|
|
231
|
+
taskMarkdown: string;
|
|
232
|
+
changedFiles: string[];
|
|
233
|
+
changeFiles?: ChangeFile[];
|
|
234
|
+
}
|
|
235
|
+
export interface ReviewFixPrompt {
|
|
236
|
+
promptText: string;
|
|
237
|
+
needed: boolean;
|
|
238
|
+
}
|
|
239
|
+
export type RunStatus = "created" | "in_progress" | "reviewed" | "completed";
|
|
240
|
+
export interface DevGuardRunLog {
|
|
241
|
+
id: string;
|
|
242
|
+
createdAt: string;
|
|
243
|
+
updatedAt?: string;
|
|
244
|
+
command: string;
|
|
245
|
+
title?: string;
|
|
246
|
+
userRequest?: string;
|
|
247
|
+
generatedTaskMarkdown?: string;
|
|
248
|
+
generatedCodexPrompt?: string;
|
|
249
|
+
relatedFiles: string[];
|
|
250
|
+
model?: string;
|
|
251
|
+
provider?: AIProviderName;
|
|
252
|
+
gitHead?: string;
|
|
253
|
+
gitBranch?: string;
|
|
254
|
+
changedFilesAtCreation: string[];
|
|
255
|
+
projectIdentity?: ProjectIdentity;
|
|
256
|
+
status: RunStatus;
|
|
257
|
+
reviewResult?: string;
|
|
258
|
+
fixPrompt?: string;
|
|
259
|
+
targetFiles?: string[];
|
|
260
|
+
reason?: string;
|
|
261
|
+
}
|
|
262
|
+
export interface ProjectIndexEntry {
|
|
263
|
+
path: string;
|
|
264
|
+
extension: string;
|
|
265
|
+
category: string;
|
|
266
|
+
keywords: string[];
|
|
267
|
+
size: number;
|
|
268
|
+
lastModified: string;
|
|
269
|
+
hash?: string;
|
|
270
|
+
}
|
|
271
|
+
export interface FileSummary {
|
|
272
|
+
path: string;
|
|
273
|
+
role: string;
|
|
274
|
+
keywords: string[];
|
|
275
|
+
features: string[];
|
|
276
|
+
relatedFiles: string[];
|
|
277
|
+
}
|
|
278
|
+
export interface CodeGraphEntry {
|
|
279
|
+
file: string;
|
|
280
|
+
imports: string[];
|
|
281
|
+
importedBy: string[];
|
|
282
|
+
exports: string[];
|
|
283
|
+
category: string;
|
|
284
|
+
impactCandidates: string[];
|
|
285
|
+
usageHints: string[];
|
|
286
|
+
}
|
|
287
|
+
export interface ImpactHint {
|
|
288
|
+
file: string;
|
|
289
|
+
importedByCount: number;
|
|
290
|
+
importedBy: string[];
|
|
291
|
+
impactCandidates: string[];
|
|
292
|
+
affectedAreas: string[];
|
|
293
|
+
}
|
|
294
|
+
export interface InferredDiffIntent {
|
|
295
|
+
type: string;
|
|
296
|
+
subtype?: string;
|
|
297
|
+
targetCommand?: string;
|
|
298
|
+
scope: string[];
|
|
299
|
+
confidence: TaskTypeConfidence;
|
|
300
|
+
evidence: string[];
|
|
301
|
+
changedFiles: string[];
|
|
302
|
+
riskSignals: string[];
|
|
303
|
+
supportingFiles: string[];
|
|
304
|
+
}
|
|
305
|
+
export interface InferredDiffIntentClusters {
|
|
306
|
+
primaryIntent: InferredDiffIntent;
|
|
307
|
+
secondaryIntents: InferredDiffIntent[];
|
|
308
|
+
secondaryDetails: Array<{
|
|
309
|
+
intent: InferredDiffIntent;
|
|
310
|
+
severity: "info" | "caution" | "warning" | "high";
|
|
311
|
+
reason: string;
|
|
312
|
+
}>;
|
|
313
|
+
mixedRisk: "low" | "medium" | "high";
|
|
314
|
+
unrelatedFiles: string[];
|
|
315
|
+
}
|
|
316
|
+
export interface ProjectScanInputFile {
|
|
317
|
+
path: string;
|
|
318
|
+
content: string;
|
|
319
|
+
size: number;
|
|
320
|
+
lastModified: string;
|
|
321
|
+
hash?: string;
|
|
322
|
+
}
|
|
323
|
+
export interface ProjectScanResult {
|
|
324
|
+
index: ProjectIndexEntry[];
|
|
325
|
+
summaries: FileSummary[];
|
|
326
|
+
projectMapMarkdown: string;
|
|
327
|
+
codeGraph: CodeGraphEntry[];
|
|
328
|
+
}
|
|
329
|
+
export interface ProjectRefreshInput {
|
|
330
|
+
existingIndex: ProjectIndexEntry[];
|
|
331
|
+
existingSummaries: FileSummary[];
|
|
332
|
+
existingCodeGraph?: CodeGraphEntry[];
|
|
333
|
+
updatedFiles: ProjectScanInputFile[];
|
|
334
|
+
removedPaths: string[];
|
|
335
|
+
}
|
|
336
|
+
export interface ProjectRefreshResult extends ProjectScanResult {
|
|
337
|
+
updatedPaths: string[];
|
|
338
|
+
removedPaths: string[];
|
|
339
|
+
unchangedCount: number;
|
|
340
|
+
}
|
|
341
|
+
export interface CompactReportInput {
|
|
342
|
+
taskMarkdown: string;
|
|
343
|
+
changedFiles: string[];
|
|
344
|
+
checkReport: GuardReport;
|
|
345
|
+
runLog?: DevGuardRunLog;
|
|
346
|
+
scanStale?: boolean;
|
|
347
|
+
anchorMode?: "diff-first" | "task-first";
|
|
348
|
+
}
|
|
349
|
+
export interface CompactReport {
|
|
350
|
+
task: string;
|
|
351
|
+
userRequest: string;
|
|
352
|
+
changedFiles: string[];
|
|
353
|
+
check: string;
|
|
354
|
+
review: string;
|
|
355
|
+
runId: string;
|
|
356
|
+
nextAction: string;
|
|
357
|
+
}
|
|
358
|
+
export type TaskAnchorMode = "use_task" | "uncertain" | "stale" | "anchor_absent";
|
|
359
|
+
export interface TaskAnchorFreshnessResult {
|
|
360
|
+
matchScore: number;
|
|
361
|
+
mode: TaskAnchorMode;
|
|
362
|
+
taskType?: string;
|
|
363
|
+
diffType?: string;
|
|
364
|
+
reasons: string[];
|
|
365
|
+
drift: DriftResult;
|
|
366
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/update.d.ts
ADDED
package/dist/update.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { filterDevGuardContextFiles } from "./context-files.js";
|
|
2
|
+
export function generateUpdateSuggestions(input) {
|
|
3
|
+
const allChangeFiles = normalizeChangeFiles(input.changeFiles, input.changedFiles);
|
|
4
|
+
const changeFiles = filterDevGuardContextFiles(allChangeFiles, input.includeContextFiles);
|
|
5
|
+
const changedFiles = normalizeFiles(changeFiles.map((file) => file.path));
|
|
6
|
+
const generatedAt = new Date().toISOString();
|
|
7
|
+
const stats = getDiffStats(input.diffText);
|
|
8
|
+
const summary = buildSummary(changeFiles, stats, allChangeFiles.length > 0);
|
|
9
|
+
const taskSummary = firstMeaningfulLine(input.taskMarkdown, "No task summary found in .devguard/task.md.");
|
|
10
|
+
const rulesSummary = firstMeaningfulLine(input.rulesMarkdown, "No rule summary found in .devguard/rules.md.");
|
|
11
|
+
const mistakesSummary = firstMeaningfulLine(input.mistakesMarkdown, "No mistake notes found in .devguard/mistakes.md.");
|
|
12
|
+
const runSummary = input.runLog ? formatRunSummary(input.runLog) : "No saved run context found.";
|
|
13
|
+
const changedFileList = formatList(changeFiles.length > 0 ? changeFiles.map(formatChangeFile) : ["none"]);
|
|
14
|
+
const decisions = inferDecisionNotes(changedFiles);
|
|
15
|
+
const cautions = inferCautionNotes(changeFiles, stats, rulesSummary);
|
|
16
|
+
const repeatRules = inferRepeatPreventionRules(changedFiles, mistakesSummary);
|
|
17
|
+
const ruleHygiene = inferRuleHygiene(input.rulesMarkdown, input.mistakesMarkdown);
|
|
18
|
+
return {
|
|
19
|
+
projectStateSuggestion: section("Project State Update Candidate", generatedAt, [
|
|
20
|
+
["Change summary", summary],
|
|
21
|
+
["Changed files", changedFileList],
|
|
22
|
+
["State notes", formatList(inferProjectStateNotes(changedFiles))]
|
|
23
|
+
]),
|
|
24
|
+
currentTaskSuggestion: section("Current Task Update Candidate", generatedAt, [
|
|
25
|
+
["Change summary", summary],
|
|
26
|
+
["Task reference", taskSummary],
|
|
27
|
+
["Run reference", runSummary],
|
|
28
|
+
["Changed files", changedFileList],
|
|
29
|
+
["Remaining review", formatList(cautions)]
|
|
30
|
+
]),
|
|
31
|
+
decisionsSuggestion: section("Decision Update Candidate", generatedAt, [
|
|
32
|
+
["Change summary", summary],
|
|
33
|
+
["Decision candidates", formatList(decisions)],
|
|
34
|
+
["Run context", runSummary],
|
|
35
|
+
["Cautions", formatList(cautions)]
|
|
36
|
+
]),
|
|
37
|
+
doNotRepeatSuggestion: section("Do Not Repeat Candidate", generatedAt, [
|
|
38
|
+
["Change summary", summary],
|
|
39
|
+
["Repeat prevention candidates", formatList(repeatRules)],
|
|
40
|
+
["Rule hygiene candidates", formatList(ruleHygiene)],
|
|
41
|
+
["Run context", runSummary],
|
|
42
|
+
["Changed files", changedFileList]
|
|
43
|
+
]),
|
|
44
|
+
summary
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function formatRunSummary(runLog) {
|
|
48
|
+
return [
|
|
49
|
+
`- run id: ${runLog.id}`,
|
|
50
|
+
`- command: ${runLog.command}`,
|
|
51
|
+
`- user request: ${runLog.userRequest || "none"}`,
|
|
52
|
+
`- related files: ${runLog.relatedFiles.length > 0 ? runLog.relatedFiles.join(", ") : "none"}`,
|
|
53
|
+
`- status: ${runLog.status}`
|
|
54
|
+
].join("\n");
|
|
55
|
+
}
|
|
56
|
+
function normalizeChangeFiles(changeFiles, changedFiles) {
|
|
57
|
+
const source = changeFiles ?? changedFiles.map((path) => ({ path, status: "modified", source: "workingTree" }));
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const normalized = [];
|
|
60
|
+
for (const file of source) {
|
|
61
|
+
const path = file.path.trim();
|
|
62
|
+
if (!path) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const key = `${file.source}:${file.status}:${file.oldPath ?? ""}:${path}`;
|
|
66
|
+
if (seen.has(key)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
seen.add(key);
|
|
70
|
+
normalized.push({ ...file, path });
|
|
71
|
+
}
|
|
72
|
+
return normalized.sort((a, b) => a.path.localeCompare(b.path) || a.source.localeCompare(b.source));
|
|
73
|
+
}
|
|
74
|
+
function normalizeFiles(files) {
|
|
75
|
+
return [...new Set(files.map((file) => file.trim()).filter(Boolean))].sort();
|
|
76
|
+
}
|
|
77
|
+
function getDiffStats(diffText) {
|
|
78
|
+
return diffText.split("\n").reduce((stats, line) => {
|
|
79
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
80
|
+
stats.addedLines += 1;
|
|
81
|
+
}
|
|
82
|
+
if (line.startsWith("-") && !line.startsWith("---")) {
|
|
83
|
+
stats.removedLines += 1;
|
|
84
|
+
}
|
|
85
|
+
return stats;
|
|
86
|
+
}, { addedLines: 0, removedLines: 0 });
|
|
87
|
+
}
|
|
88
|
+
function buildSummary(changeFiles, stats, hasAnyChangeFiles) {
|
|
89
|
+
if (changeFiles.length === 0) {
|
|
90
|
+
if (hasAnyChangeFiles) {
|
|
91
|
+
return "No code changes detected. Context files changed only.";
|
|
92
|
+
}
|
|
93
|
+
return "No tracked, staged, or untracked changes detected.";
|
|
94
|
+
}
|
|
95
|
+
const changedFiles = normalizeFiles(changeFiles.map((file) => file.path));
|
|
96
|
+
const areas = inferAreas(changedFiles).join(", ");
|
|
97
|
+
const untrackedCount = changeFiles.filter((file) => file.source === "untracked").length;
|
|
98
|
+
const stagedCount = changeFiles.filter((file) => file.source === "staged").length;
|
|
99
|
+
const workingTreeCount = changeFiles.filter((file) => file.source === "workingTree").length;
|
|
100
|
+
const sourceSummary = [`working tree ${workingTreeCount}`, `staged ${stagedCount}`, `untracked ${untrackedCount}`].join(", ");
|
|
101
|
+
return `${changedFiles.length} file(s) changed in ${areas}; ${sourceSummary}; +${stats.addedLines}/-${stats.removedLines} diff lines.`;
|
|
102
|
+
}
|
|
103
|
+
function inferAreas(changedFiles) {
|
|
104
|
+
const areas = new Set();
|
|
105
|
+
for (const file of changedFiles) {
|
|
106
|
+
if (file.startsWith("packages/core/")) {
|
|
107
|
+
areas.add("core");
|
|
108
|
+
}
|
|
109
|
+
else if (file.startsWith("packages/cli/")) {
|
|
110
|
+
areas.add("cli");
|
|
111
|
+
}
|
|
112
|
+
else if (file.startsWith("docs/") || file === "README.md") {
|
|
113
|
+
areas.add("docs");
|
|
114
|
+
}
|
|
115
|
+
else if (file === "package.json" || file.endsWith("package.json") || file.includes("tsconfig") || file === "pnpm-workspace.yaml") {
|
|
116
|
+
areas.add("workspace config");
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
areas.add("other");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return areas.size > 0 ? [...areas] : ["none"];
|
|
123
|
+
}
|
|
124
|
+
function firstMeaningfulLine(markdown, fallback) {
|
|
125
|
+
const line = markdown
|
|
126
|
+
.split("\n")
|
|
127
|
+
.map((item) => item.trim())
|
|
128
|
+
.find((item) => item.length > 0 && !item.startsWith("#") && item !== "-");
|
|
129
|
+
return line ?? fallback;
|
|
130
|
+
}
|
|
131
|
+
function inferProjectStateNotes(changedFiles) {
|
|
132
|
+
const notes = [];
|
|
133
|
+
if (changedFiles.some((file) => file.startsWith("packages/core/"))) {
|
|
134
|
+
notes.push("Core analysis behavior or reusable rule-based logic changed.");
|
|
135
|
+
}
|
|
136
|
+
if (changedFiles.some((file) => file.startsWith("packages/cli/"))) {
|
|
137
|
+
notes.push("CLI command behavior changed.");
|
|
138
|
+
}
|
|
139
|
+
if (changedFiles.includes("packages/cli/src/self.ts")) {
|
|
140
|
+
notes.push("Dogfooding workflow command behavior changed.");
|
|
141
|
+
}
|
|
142
|
+
if (changedFiles.includes("packages/core/src/prompt.ts") || changedFiles.includes("packages/cli/src/prompt.ts")) {
|
|
143
|
+
notes.push("Codex prompt density, compression, or token-budget behavior changed.");
|
|
144
|
+
}
|
|
145
|
+
if (changedFiles.includes("packages/core/src/completion.ts")) {
|
|
146
|
+
notes.push("Task completion criteria behavior changed.");
|
|
147
|
+
}
|
|
148
|
+
if (changedFiles.some((file) => file === "package.json" || file.endsWith("package.json") || file.includes("tsconfig"))) {
|
|
149
|
+
notes.push("Workspace build, package, or TypeScript setup changed.");
|
|
150
|
+
}
|
|
151
|
+
return notes.length > 0 ? notes : ["No durable project-state update inferred by rules."];
|
|
152
|
+
}
|
|
153
|
+
function inferDecisionNotes(changedFiles) {
|
|
154
|
+
const notes = [];
|
|
155
|
+
if (changedFiles.some((file) => file.startsWith("packages/core/"))) {
|
|
156
|
+
notes.push("Keep analysis logic in packages/core so future analyzers can be added behind the CLI.");
|
|
157
|
+
}
|
|
158
|
+
if (changedFiles.some((file) => file.startsWith("packages/cli/"))) {
|
|
159
|
+
notes.push("Keep file writes opt-in from the CLI and default to preview output.");
|
|
160
|
+
}
|
|
161
|
+
if (changedFiles.includes("packages/cli/src/self.ts")) {
|
|
162
|
+
notes.push("Keep dogfooding shortcuts as wrappers around existing task/check/review logic rather than duplicating analyzers.");
|
|
163
|
+
}
|
|
164
|
+
if (changedFiles.includes("packages/core/src/prompt.ts") || changedFiles.includes("packages/cli/src/prompt.ts")) {
|
|
165
|
+
notes.push("Preserve guardrail-critical prompt sections when reducing token usage.");
|
|
166
|
+
}
|
|
167
|
+
if (changedFiles.some((file) => file === "README.md")) {
|
|
168
|
+
notes.push("Document new CLI behavior when commands or flags change.");
|
|
169
|
+
}
|
|
170
|
+
return notes.length > 0 ? notes : ["No decision candidate inferred by rules."];
|
|
171
|
+
}
|
|
172
|
+
function inferCautionNotes(changeFiles, stats, rulesSummary) {
|
|
173
|
+
const changedFiles = normalizeFiles(changeFiles.map((file) => file.path));
|
|
174
|
+
const notes = [`Review against rule context: ${rulesSummary}`];
|
|
175
|
+
if (changedFiles.length >= 8 || stats.addedLines + stats.removedLines >= 400) {
|
|
176
|
+
notes.push("Diff is broad enough to require extra scope review before documenting it as intended state.");
|
|
177
|
+
}
|
|
178
|
+
if (changedFiles.some((file) => file.includes("package.json") || file.includes("pnpm-lock.yaml"))) {
|
|
179
|
+
notes.push("Dependency or package metadata changed; verify install/build commands still work.");
|
|
180
|
+
}
|
|
181
|
+
if (changeFiles.some((file) => file.source === "untracked")) {
|
|
182
|
+
notes.push("Untracked files have no git diff body yet; treat them as newly created files and review contents before commit.");
|
|
183
|
+
}
|
|
184
|
+
return notes;
|
|
185
|
+
}
|
|
186
|
+
function inferRepeatPreventionRules(changedFiles, mistakesSummary) {
|
|
187
|
+
const rules = [`Compare this change against existing mistake context: ${mistakesSummary}`];
|
|
188
|
+
if (changedFiles.some((file) => file.startsWith("packages/cli/"))) {
|
|
189
|
+
rules.push("Do not make write-mode behavior the default; keep preview-only behavior unless explicitly requested.");
|
|
190
|
+
}
|
|
191
|
+
if (changedFiles.some((file) => file.startsWith("packages/core/"))) {
|
|
192
|
+
rules.push("Do not mix rule-based core logic with CLI formatting or filesystem side effects.");
|
|
193
|
+
}
|
|
194
|
+
if (changedFiles.some((file) => file === "README.md")) {
|
|
195
|
+
rules.push("Do not ship command changes without updating README usage examples.");
|
|
196
|
+
}
|
|
197
|
+
if (changedFiles.includes("packages/core/src/prompt.ts")) {
|
|
198
|
+
rules.push("Do not remove PROTECT/SUCCESS/VERIFY when compressing Codex prompts.");
|
|
199
|
+
}
|
|
200
|
+
return dedupeLines(rules);
|
|
201
|
+
}
|
|
202
|
+
function inferRuleHygiene(rulesMarkdown, mistakesMarkdown) {
|
|
203
|
+
const lines = [...extractRuleLines(rulesMarkdown), ...extractRuleLines(mistakesMarkdown)];
|
|
204
|
+
const normalized = lines.map(normalizeRuleLine).filter(Boolean);
|
|
205
|
+
const duplicateCount = normalized.length - new Set(normalized).size;
|
|
206
|
+
const notes = [];
|
|
207
|
+
if (duplicateCount > 0) {
|
|
208
|
+
notes.push(`Deduplicate ${duplicateCount} repeated rule candidate(s).`);
|
|
209
|
+
}
|
|
210
|
+
if (hasRuleConflict(normalized, "preview", "write") || hasRuleConflict(normalized, "compact", "verbose")) {
|
|
211
|
+
notes.push("Review possible contradictory rules before promoting them into project policy.");
|
|
212
|
+
}
|
|
213
|
+
if (lines.some((line) => /packages\/|\.devguard|pnpm|typescript|cli/i.test(line))) {
|
|
214
|
+
notes.push("Classify tool/repository-specific rules separately from generic AI coding rules.");
|
|
215
|
+
}
|
|
216
|
+
if (lines.length > 20) {
|
|
217
|
+
notes.push("Consider pruning stale or low-relevance rules to keep prompts compact.");
|
|
218
|
+
}
|
|
219
|
+
return notes.length > 0 ? dedupeLines(notes) : ["No duplicate or contradictory rule candidates inferred by rules."];
|
|
220
|
+
}
|
|
221
|
+
function extractRuleLines(markdown) {
|
|
222
|
+
return markdown
|
|
223
|
+
.split("\n")
|
|
224
|
+
.map((line) => line.trim())
|
|
225
|
+
.filter((line) => /^[-*]\s+/.test(line))
|
|
226
|
+
.map((line) => line.replace(/^[-*]\s+/, "").trim());
|
|
227
|
+
}
|
|
228
|
+
function normalizeRuleLine(line) {
|
|
229
|
+
return line.toLowerCase().replace(/\s+/g, " ").trim();
|
|
230
|
+
}
|
|
231
|
+
function hasRuleConflict(lines, first, second) {
|
|
232
|
+
return lines.some((line) => line.includes(first)) && lines.some((line) => line.includes(second));
|
|
233
|
+
}
|
|
234
|
+
function dedupeLines(lines) {
|
|
235
|
+
return [...new Map(lines.map((line) => [normalizeRuleLine(line), line])).values()];
|
|
236
|
+
}
|
|
237
|
+
function section(title, generatedAt, entries) {
|
|
238
|
+
const body = entries.map(([heading, value]) => `### ${heading}\n${value}`).join("\n\n");
|
|
239
|
+
return `## ${title}\n\n- Date/time: ${generatedAt}\n\n${body}\n`;
|
|
240
|
+
}
|
|
241
|
+
function formatList(items) {
|
|
242
|
+
return items.map((item) => `- ${item}`).join("\n");
|
|
243
|
+
}
|
|
244
|
+
function formatChangeFile(file) {
|
|
245
|
+
const rename = file.oldPath ? ` from ${file.oldPath}` : "";
|
|
246
|
+
const state = file.source === file.status ? file.source : `${file.source}/${file.status}`;
|
|
247
|
+
const newFileNote = file.source === "untracked" ? " - 새 파일 생성됨" : "";
|
|
248
|
+
return `${file.path} (${state}${rename})${newFileNote}`;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dev-guard/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/projectbom/dev-guard.git",
|
|
10
|
+
"directory": "packages/core"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -b",
|
|
28
|
+
"clean": "tsc -b --clean"
|
|
29
|
+
}
|
|
30
|
+
}
|