adce-storage 0.0.0-stage → 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/dist/artifact-repository.d.ts +32 -0
- package/dist/artifact-repository.js +234 -0
- package/dist/artifact-repository.js.map +1 -0
- package/dist/conflict-repository.d.ts +31 -0
- package/dist/conflict-repository.js +168 -0
- package/dist/conflict-repository.js.map +1 -0
- package/dist/database.d.ts +9 -0
- package/dist/database.js +99 -0
- package/dist/database.js.map +1 -0
- package/dist/health-sync.d.ts +6 -0
- package/dist/health-sync.js +27 -0
- package/dist/health-sync.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/relationship-repository.d.ts +25 -0
- package/dist/relationship-repository.js +151 -0
- package/dist/relationship-repository.js.map +1 -0
- package/dist/scan-repository.d.ts +11 -0
- package/dist/scan-repository.js +59 -0
- package/dist/scan-repository.js.map +1 -0
- package/dist/schema.d.ts +929 -0
- package/dist/schema.js +60 -0
- package/dist/schema.js.map +1 -0
- package/package.json +32 -3
- package/README.md +0 -3
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ArtifactRecord, ArtifactType, AuthorityLevel, HealthState, VerificationState } from "adce-shared";
|
|
2
|
+
import type { AdceDb } from "./database.js";
|
|
3
|
+
export interface ListArtifactOptions {
|
|
4
|
+
types?: ArtifactType[];
|
|
5
|
+
}
|
|
6
|
+
export interface InsertManualArtifactInput {
|
|
7
|
+
id?: string;
|
|
8
|
+
name: string;
|
|
9
|
+
type: ArtifactType;
|
|
10
|
+
path?: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface UpdateArtifactMetadataInput {
|
|
13
|
+
name?: string;
|
|
14
|
+
type?: ArtifactType;
|
|
15
|
+
}
|
|
16
|
+
export declare const listArtifacts: (db: AdceDb, options?: ListArtifactOptions) => ArtifactRecord[];
|
|
17
|
+
export declare const listDetectedPathArtifacts: (db: AdceDb) => ArtifactRecord[];
|
|
18
|
+
export declare const listUnreviewedDetectedArtifacts: (db: AdceDb) => ArtifactRecord[];
|
|
19
|
+
export declare const findArtifactByPath: (db: AdceDb, filePath: string) => ArtifactRecord | null;
|
|
20
|
+
export declare const findArtifactById: (db: AdceDb, id: string) => ArtifactRecord | null;
|
|
21
|
+
export declare const findArtifactsByIdPrefix: (db: AdceDb, prefix: string) => ArtifactRecord[];
|
|
22
|
+
export declare const setArtifactVerification: (db: AdceDb, id: string, verification: VerificationState) => ArtifactRecord | null;
|
|
23
|
+
export declare const setArtifactAuthority: (db: AdceDb, id: string, authority: AuthorityLevel) => ArtifactRecord | null;
|
|
24
|
+
export declare const setArtifactHealth: (db: AdceDb, id: string, health: HealthState) => ArtifactRecord | null;
|
|
25
|
+
export declare const updateArtifactMetadata: (db: AdceDb, id: string, input: UpdateArtifactMetadataInput) => ArtifactRecord | null;
|
|
26
|
+
export declare function upsertDetectedByPath(db: AdceDb, incoming: Omit<ArtifactRecord, "id" | "createdAt"> & {
|
|
27
|
+
id?: string;
|
|
28
|
+
createdAt?: string;
|
|
29
|
+
}): ArtifactRecord;
|
|
30
|
+
export declare const insertManualArtifact: (db: AdceDb, input: InsertManualArtifactInput) => ArtifactRecord;
|
|
31
|
+
export declare const deleteArtifactById: (db: AdceDb, id: string) => void;
|
|
32
|
+
export declare const countArtifacts: (db: AdceDb) => number;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { and, asc, eq, isNotNull, inArray, like } from "drizzle-orm";
|
|
2
|
+
import { artifacts } from "./schema.js";
|
|
3
|
+
const toRecord = (row) => {
|
|
4
|
+
return {
|
|
5
|
+
id: row.id,
|
|
6
|
+
path: row.path,
|
|
7
|
+
name: row.name,
|
|
8
|
+
type: row.type,
|
|
9
|
+
origin: row.origin,
|
|
10
|
+
verification: row.verification,
|
|
11
|
+
health: row.health,
|
|
12
|
+
authority: row.authority,
|
|
13
|
+
contentHash: row.contentHash,
|
|
14
|
+
sizeBytes: row.sizeBytes,
|
|
15
|
+
mtimeMs: row.mtimeMs,
|
|
16
|
+
createdAt: row.createdAt,
|
|
17
|
+
updatedAt: row.updatedAt,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export const listArtifacts = (db, options = {}) => {
|
|
21
|
+
const { types } = options;
|
|
22
|
+
if (types && types.length > 0) {
|
|
23
|
+
return db
|
|
24
|
+
.select()
|
|
25
|
+
.from(artifacts)
|
|
26
|
+
.where(inArray(artifacts.type, types))
|
|
27
|
+
.all()
|
|
28
|
+
.map(toRecord);
|
|
29
|
+
}
|
|
30
|
+
return db.select().from(artifacts).all().map(toRecord);
|
|
31
|
+
};
|
|
32
|
+
export const listDetectedPathArtifacts = (db) => db
|
|
33
|
+
.select()
|
|
34
|
+
.from(artifacts)
|
|
35
|
+
.where(and(eq(artifacts.origin, "DETECTED"), isNotNull(artifacts.path)))
|
|
36
|
+
.all()
|
|
37
|
+
.map(toRecord);
|
|
38
|
+
export const listUnreviewedDetectedArtifacts = (db) => db
|
|
39
|
+
.select()
|
|
40
|
+
.from(artifacts)
|
|
41
|
+
.where(and(eq(artifacts.origin, "DETECTED"), eq(artifacts.verification, "UNREVIEWED")))
|
|
42
|
+
.orderBy(asc(artifacts.path), asc(artifacts.name))
|
|
43
|
+
.all()
|
|
44
|
+
.map(toRecord);
|
|
45
|
+
export const findArtifactByPath = (db, filePath) => {
|
|
46
|
+
const row = db
|
|
47
|
+
.select()
|
|
48
|
+
.from(artifacts)
|
|
49
|
+
.where(eq(artifacts.path, filePath))
|
|
50
|
+
.get();
|
|
51
|
+
return row ? toRecord(row) : null;
|
|
52
|
+
};
|
|
53
|
+
export const findArtifactById = (db, id) => {
|
|
54
|
+
const row = db.select().from(artifacts).where(eq(artifacts.id, id)).get();
|
|
55
|
+
return row ? toRecord(row) : null;
|
|
56
|
+
};
|
|
57
|
+
export const findArtifactsByIdPrefix = (db, prefix) => {
|
|
58
|
+
if (!prefix)
|
|
59
|
+
return [];
|
|
60
|
+
return db
|
|
61
|
+
.select()
|
|
62
|
+
.from(artifacts)
|
|
63
|
+
.where(like(artifacts.id, `${prefix}%`))
|
|
64
|
+
.all()
|
|
65
|
+
.map(toRecord);
|
|
66
|
+
};
|
|
67
|
+
export const setArtifactVerification = (db, id, verification) => {
|
|
68
|
+
const existing = findArtifactById(db, id);
|
|
69
|
+
if (!existing)
|
|
70
|
+
return null;
|
|
71
|
+
const updatedAt = new Date().toISOString();
|
|
72
|
+
db.update(artifacts)
|
|
73
|
+
.set({ verification, updatedAt })
|
|
74
|
+
.where(eq(artifacts.id, id))
|
|
75
|
+
.run();
|
|
76
|
+
return {
|
|
77
|
+
...existing,
|
|
78
|
+
verification,
|
|
79
|
+
updatedAt,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export const setArtifactAuthority = (db, id, authority) => {
|
|
83
|
+
const existing = findArtifactById(db, id);
|
|
84
|
+
if (!existing)
|
|
85
|
+
return null;
|
|
86
|
+
const updatedAt = new Date().toISOString();
|
|
87
|
+
db.update(artifacts)
|
|
88
|
+
.set({ authority, updatedAt })
|
|
89
|
+
.where(eq(artifacts.id, id))
|
|
90
|
+
.run();
|
|
91
|
+
return {
|
|
92
|
+
...existing,
|
|
93
|
+
authority,
|
|
94
|
+
updatedAt,
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
export const setArtifactHealth = (db, id, health) => {
|
|
98
|
+
const existing = findArtifactById(db, id);
|
|
99
|
+
if (!existing)
|
|
100
|
+
return null;
|
|
101
|
+
const updatedAt = new Date().toISOString();
|
|
102
|
+
db.update(artifacts)
|
|
103
|
+
.set({ health, updatedAt })
|
|
104
|
+
.where(eq(artifacts.id, id))
|
|
105
|
+
.run();
|
|
106
|
+
return {
|
|
107
|
+
...existing,
|
|
108
|
+
health,
|
|
109
|
+
updatedAt,
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
export const updateArtifactMetadata = (db, id, input) => {
|
|
113
|
+
const existing = findArtifactById(db, id);
|
|
114
|
+
if (!existing)
|
|
115
|
+
return null;
|
|
116
|
+
const name = input.name ?? existing.name;
|
|
117
|
+
const type = input.type ?? existing.type;
|
|
118
|
+
const updatedAt = new Date().toISOString();
|
|
119
|
+
db.update(artifacts)
|
|
120
|
+
.set({ name, type, updatedAt })
|
|
121
|
+
.where(eq(artifacts.id, id))
|
|
122
|
+
.run();
|
|
123
|
+
return {
|
|
124
|
+
...existing,
|
|
125
|
+
name,
|
|
126
|
+
type,
|
|
127
|
+
updatedAt,
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
// Human fields (verification, origin, authority, health) must survive scans.
|
|
131
|
+
export function upsertDetectedByPath(db, incoming) {
|
|
132
|
+
const existing = incoming.path ? findArtifactByPath(db, incoming.path) : null;
|
|
133
|
+
const now = incoming.updatedAt;
|
|
134
|
+
if (existing) {
|
|
135
|
+
// Preserve human fields later; for now preserve id + createdAt
|
|
136
|
+
const updated = {
|
|
137
|
+
...existing,
|
|
138
|
+
name: incoming.name,
|
|
139
|
+
type: incoming.type,
|
|
140
|
+
contentHash: incoming.contentHash,
|
|
141
|
+
sizeBytes: incoming.sizeBytes,
|
|
142
|
+
mtimeMs: incoming.mtimeMs,
|
|
143
|
+
updatedAt: now,
|
|
144
|
+
};
|
|
145
|
+
db.update(artifacts)
|
|
146
|
+
.set({
|
|
147
|
+
name: updated.name,
|
|
148
|
+
type: updated.type,
|
|
149
|
+
contentHash: updated.contentHash,
|
|
150
|
+
sizeBytes: updated.sizeBytes,
|
|
151
|
+
mtimeMs: updated.mtimeMs,
|
|
152
|
+
updatedAt: updated.updatedAt,
|
|
153
|
+
})
|
|
154
|
+
.where(eq(artifacts.id, existing.id))
|
|
155
|
+
.run();
|
|
156
|
+
return updated;
|
|
157
|
+
}
|
|
158
|
+
const created = {
|
|
159
|
+
id: incoming.id ?? crypto.randomUUID(),
|
|
160
|
+
path: incoming.path,
|
|
161
|
+
name: incoming.name,
|
|
162
|
+
type: incoming.type,
|
|
163
|
+
origin: "DETECTED",
|
|
164
|
+
verification: "UNREVIEWED",
|
|
165
|
+
health: "UNKNOWN",
|
|
166
|
+
authority: "UNKNOWN",
|
|
167
|
+
contentHash: incoming.contentHash,
|
|
168
|
+
sizeBytes: incoming.sizeBytes,
|
|
169
|
+
mtimeMs: incoming.mtimeMs,
|
|
170
|
+
createdAt: now,
|
|
171
|
+
updatedAt: now,
|
|
172
|
+
};
|
|
173
|
+
db.insert(artifacts)
|
|
174
|
+
.values({
|
|
175
|
+
id: created.id,
|
|
176
|
+
path: created.path,
|
|
177
|
+
name: created.name,
|
|
178
|
+
type: created.type,
|
|
179
|
+
origin: created.origin,
|
|
180
|
+
verification: created.verification,
|
|
181
|
+
health: created.health,
|
|
182
|
+
authority: created.authority,
|
|
183
|
+
contentHash: created.contentHash,
|
|
184
|
+
sizeBytes: created.sizeBytes,
|
|
185
|
+
mtimeMs: created.mtimeMs,
|
|
186
|
+
createdAt: created.createdAt,
|
|
187
|
+
updatedAt: created.updatedAt,
|
|
188
|
+
})
|
|
189
|
+
.run();
|
|
190
|
+
return created;
|
|
191
|
+
}
|
|
192
|
+
export const insertManualArtifact = (db, input) => {
|
|
193
|
+
const now = new Date().toISOString();
|
|
194
|
+
const created = {
|
|
195
|
+
id: input.id ?? crypto.randomUUID(),
|
|
196
|
+
path: input.path ?? null,
|
|
197
|
+
name: input.name,
|
|
198
|
+
type: input.type,
|
|
199
|
+
origin: "MANUAL",
|
|
200
|
+
verification: "VERIFIED",
|
|
201
|
+
health: "UNKNOWN",
|
|
202
|
+
authority: "UNKNOWN",
|
|
203
|
+
contentHash: null,
|
|
204
|
+
sizeBytes: null,
|
|
205
|
+
mtimeMs: null,
|
|
206
|
+
createdAt: now,
|
|
207
|
+
updatedAt: now,
|
|
208
|
+
};
|
|
209
|
+
db.insert(artifacts)
|
|
210
|
+
.values({
|
|
211
|
+
id: created.id,
|
|
212
|
+
path: created.path,
|
|
213
|
+
name: created.name,
|
|
214
|
+
type: created.type,
|
|
215
|
+
origin: created.origin,
|
|
216
|
+
verification: created.verification,
|
|
217
|
+
health: created.health,
|
|
218
|
+
authority: created.authority,
|
|
219
|
+
contentHash: created.contentHash,
|
|
220
|
+
sizeBytes: created.sizeBytes,
|
|
221
|
+
mtimeMs: created.mtimeMs,
|
|
222
|
+
createdAt: created.createdAt,
|
|
223
|
+
updatedAt: created.updatedAt,
|
|
224
|
+
})
|
|
225
|
+
.run();
|
|
226
|
+
return created;
|
|
227
|
+
};
|
|
228
|
+
export const deleteArtifactById = (db, id) => {
|
|
229
|
+
db.delete(artifacts).where(eq(artifacts.id, id)).run();
|
|
230
|
+
};
|
|
231
|
+
export const countArtifacts = (db) => {
|
|
232
|
+
return db.select().from(artifacts).all().length;
|
|
233
|
+
};
|
|
234
|
+
//# sourceMappingURL=artifact-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-repository.js","sourceRoot":"","sources":["../src/artifact-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ConfidenceLevel, ConflictCategory, ConflictLifecycle, ConflictRecord, ConflictSeverity } from "adce-shared";
|
|
2
|
+
import type { AdceDb } from "./database.js";
|
|
3
|
+
export interface UpsertDetectedConflictInput {
|
|
4
|
+
category: ConflictCategory;
|
|
5
|
+
confidence: ConfidenceLevel;
|
|
6
|
+
severity: ConflictSeverity;
|
|
7
|
+
sourceArtifactId: string | null;
|
|
8
|
+
targetArtifactId: string | null;
|
|
9
|
+
relationshipId: string | null;
|
|
10
|
+
summary: string;
|
|
11
|
+
evidence: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare const listConflicts: (db: AdceDb, options?: {
|
|
14
|
+
includeClosed?: boolean;
|
|
15
|
+
}) => ConflictRecord[];
|
|
16
|
+
export declare const findConflictById: (db: AdceDb, id: string) => ConflictRecord | null;
|
|
17
|
+
export declare const findConflictsByIdPrefix: (db: AdceDb, prefix: string) => ConflictRecord[];
|
|
18
|
+
export declare const findConflictByCategoryAndRelationship: (db: AdceDb, category: ConflictCategory, relationshipId: string) => ConflictRecord | null;
|
|
19
|
+
export declare const findConflictByCategoryAndArtifacts: (db: AdceDb, category: ConflictCategory, sourceArtifactId: string, targetArtifactId: string) => ConflictRecord | null;
|
|
20
|
+
export declare const upsertDetectedConflict: (db: AdceDb, input: UpsertDetectedConflictInput) => ConflictRecord;
|
|
21
|
+
export declare const setConflictLifecycle: (db: AdceDb, id: string, lifecycle: ConflictLifecycle) => ConflictRecord | null;
|
|
22
|
+
export interface UpdateConflictAnalysisInput {
|
|
23
|
+
lifecycle?: ConflictLifecycle;
|
|
24
|
+
confidence?: ConfidenceLevel;
|
|
25
|
+
severity?: ConflictSeverity;
|
|
26
|
+
}
|
|
27
|
+
/** Soft analysis update — refuses closed conflicts. */
|
|
28
|
+
export declare const updateConflictAnalysis: (db: AdceDb, id: string, input: UpdateConflictAnalysisInput) => ConflictRecord | null;
|
|
29
|
+
export declare const countConflicts: (db: AdceDb, options?: {
|
|
30
|
+
includeClosed?: boolean;
|
|
31
|
+
}) => number;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { and, eq, like, ne } from "drizzle-orm";
|
|
2
|
+
import { conflicts } from "./schema.js";
|
|
3
|
+
const toRecord = (row) => ({
|
|
4
|
+
id: row.id,
|
|
5
|
+
category: row.category,
|
|
6
|
+
lifecycle: row.lifecycle,
|
|
7
|
+
confidence: row.confidence,
|
|
8
|
+
severity: row.severity,
|
|
9
|
+
sourceArtifactId: row.sourceArtifactId,
|
|
10
|
+
targetArtifactId: row.targetArtifactId,
|
|
11
|
+
relationshipId: row.relationshipId,
|
|
12
|
+
summary: row.summary,
|
|
13
|
+
evidence: row.evidence,
|
|
14
|
+
createdAt: row.createdAt,
|
|
15
|
+
updatedAt: row.updatedAt,
|
|
16
|
+
});
|
|
17
|
+
const CLOSED = ["REJECTED", "IGNORED", "RESOLVED"];
|
|
18
|
+
export const listConflicts = (db, options = {}) => {
|
|
19
|
+
if (options.includeClosed) {
|
|
20
|
+
return db.select().from(conflicts).all().map(toRecord);
|
|
21
|
+
}
|
|
22
|
+
return db
|
|
23
|
+
.select()
|
|
24
|
+
.from(conflicts)
|
|
25
|
+
.where(and(ne(conflicts.lifecycle, "REJECTED"), ne(conflicts.lifecycle, "IGNORED"), ne(conflicts.lifecycle, "RESOLVED")))
|
|
26
|
+
.all()
|
|
27
|
+
.map(toRecord);
|
|
28
|
+
};
|
|
29
|
+
export const findConflictById = (db, id) => {
|
|
30
|
+
const row = db.select().from(conflicts).where(eq(conflicts.id, id)).get();
|
|
31
|
+
return row ? toRecord(row) : null;
|
|
32
|
+
};
|
|
33
|
+
export const findConflictsByIdPrefix = (db, prefix) => {
|
|
34
|
+
if (!prefix)
|
|
35
|
+
return [];
|
|
36
|
+
return db
|
|
37
|
+
.select()
|
|
38
|
+
.from(conflicts)
|
|
39
|
+
.where(like(conflicts.id, `${prefix}%`))
|
|
40
|
+
.all()
|
|
41
|
+
.map(toRecord);
|
|
42
|
+
};
|
|
43
|
+
export const findConflictByCategoryAndRelationship = (db, category, relationshipId) => {
|
|
44
|
+
const row = db
|
|
45
|
+
.select()
|
|
46
|
+
.from(conflicts)
|
|
47
|
+
.where(and(eq(conflicts.category, category), eq(conflicts.relationshipId, relationshipId)))
|
|
48
|
+
.get();
|
|
49
|
+
return row ? toRecord(row) : null;
|
|
50
|
+
};
|
|
51
|
+
export const findConflictByCategoryAndArtifacts = (db, category, sourceArtifactId, targetArtifactId) => {
|
|
52
|
+
const row = db
|
|
53
|
+
.select()
|
|
54
|
+
.from(conflicts)
|
|
55
|
+
.where(and(eq(conflicts.category, category), eq(conflicts.sourceArtifactId, sourceArtifactId), eq(conflicts.targetArtifactId, targetArtifactId)))
|
|
56
|
+
.get();
|
|
57
|
+
return row ? toRecord(row) : null;
|
|
58
|
+
};
|
|
59
|
+
const refreshOpenConflict = (db, existing, input) => {
|
|
60
|
+
if (CLOSED.includes(existing.lifecycle)) {
|
|
61
|
+
return existing;
|
|
62
|
+
}
|
|
63
|
+
const updatedAt = new Date().toISOString();
|
|
64
|
+
db.update(conflicts)
|
|
65
|
+
.set({
|
|
66
|
+
confidence: input.confidence,
|
|
67
|
+
severity: input.severity,
|
|
68
|
+
summary: input.summary,
|
|
69
|
+
evidence: input.evidence,
|
|
70
|
+
sourceArtifactId: input.sourceArtifactId,
|
|
71
|
+
targetArtifactId: input.targetArtifactId,
|
|
72
|
+
relationshipId: input.relationshipId,
|
|
73
|
+
updatedAt,
|
|
74
|
+
})
|
|
75
|
+
.where(eq(conflicts.id, existing.id))
|
|
76
|
+
.run();
|
|
77
|
+
return {
|
|
78
|
+
...existing,
|
|
79
|
+
confidence: input.confidence,
|
|
80
|
+
severity: input.severity,
|
|
81
|
+
summary: input.summary,
|
|
82
|
+
evidence: input.evidence,
|
|
83
|
+
sourceArtifactId: input.sourceArtifactId,
|
|
84
|
+
targetArtifactId: input.targetArtifactId,
|
|
85
|
+
relationshipId: input.relationshipId,
|
|
86
|
+
updatedAt,
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
export const upsertDetectedConflict = (db, input) => {
|
|
90
|
+
if (input.relationshipId) {
|
|
91
|
+
const existing = findConflictByCategoryAndRelationship(db, input.category, input.relationshipId);
|
|
92
|
+
if (existing)
|
|
93
|
+
return refreshOpenConflict(db, existing, input);
|
|
94
|
+
}
|
|
95
|
+
else if (input.sourceArtifactId && input.targetArtifactId) {
|
|
96
|
+
const existing = findConflictByCategoryAndArtifacts(db, input.category, input.sourceArtifactId, input.targetArtifactId);
|
|
97
|
+
if (existing)
|
|
98
|
+
return refreshOpenConflict(db, existing, input);
|
|
99
|
+
}
|
|
100
|
+
const now = new Date().toISOString();
|
|
101
|
+
const created = {
|
|
102
|
+
id: crypto.randomUUID(),
|
|
103
|
+
category: input.category,
|
|
104
|
+
lifecycle: "DETECTED",
|
|
105
|
+
confidence: input.confidence,
|
|
106
|
+
severity: input.severity,
|
|
107
|
+
sourceArtifactId: input.sourceArtifactId,
|
|
108
|
+
targetArtifactId: input.targetArtifactId,
|
|
109
|
+
relationshipId: input.relationshipId,
|
|
110
|
+
summary: input.summary,
|
|
111
|
+
evidence: input.evidence,
|
|
112
|
+
createdAt: now,
|
|
113
|
+
updatedAt: now,
|
|
114
|
+
};
|
|
115
|
+
db.insert(conflicts)
|
|
116
|
+
.values({
|
|
117
|
+
id: created.id,
|
|
118
|
+
category: created.category,
|
|
119
|
+
lifecycle: created.lifecycle,
|
|
120
|
+
confidence: created.confidence,
|
|
121
|
+
severity: created.severity,
|
|
122
|
+
sourceArtifactId: created.sourceArtifactId,
|
|
123
|
+
targetArtifactId: created.targetArtifactId,
|
|
124
|
+
relationshipId: created.relationshipId,
|
|
125
|
+
summary: created.summary,
|
|
126
|
+
evidence: created.evidence,
|
|
127
|
+
createdAt: created.createdAt,
|
|
128
|
+
updatedAt: created.updatedAt,
|
|
129
|
+
})
|
|
130
|
+
.run();
|
|
131
|
+
return created;
|
|
132
|
+
};
|
|
133
|
+
export const setConflictLifecycle = (db, id, lifecycle) => {
|
|
134
|
+
const existing = findConflictById(db, id);
|
|
135
|
+
if (!existing)
|
|
136
|
+
return null;
|
|
137
|
+
const updatedAt = new Date().toISOString();
|
|
138
|
+
db.update(conflicts)
|
|
139
|
+
.set({ lifecycle, updatedAt })
|
|
140
|
+
.where(eq(conflicts.id, id))
|
|
141
|
+
.run();
|
|
142
|
+
return { ...existing, lifecycle, updatedAt };
|
|
143
|
+
};
|
|
144
|
+
/** Soft analysis update — refuses closed conflicts. */
|
|
145
|
+
export const updateConflictAnalysis = (db, id, input) => {
|
|
146
|
+
const existing = findConflictById(db, id);
|
|
147
|
+
if (!existing)
|
|
148
|
+
return null;
|
|
149
|
+
if (CLOSED.includes(existing.lifecycle))
|
|
150
|
+
return existing;
|
|
151
|
+
const lifecycle = input.lifecycle ?? existing.lifecycle;
|
|
152
|
+
const confidence = input.confidence ?? existing.confidence;
|
|
153
|
+
const severity = input.severity ?? existing.severity;
|
|
154
|
+
const updatedAt = new Date().toISOString();
|
|
155
|
+
db.update(conflicts)
|
|
156
|
+
.set({ lifecycle, confidence, severity, updatedAt })
|
|
157
|
+
.where(eq(conflicts.id, id))
|
|
158
|
+
.run();
|
|
159
|
+
return {
|
|
160
|
+
...existing,
|
|
161
|
+
lifecycle,
|
|
162
|
+
confidence,
|
|
163
|
+
severity,
|
|
164
|
+
updatedAt,
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
export const countConflicts = (db, options = {}) => listConflicts(db, options).length;
|
|
168
|
+
//# sourceMappingURL=conflict-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-repository.js","sourceRoot":"","sources":["../src/conflict-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import * as schema from "./schema.js";
|
|
3
|
+
export type AdceDb = ReturnType<typeof openDatabase>;
|
|
4
|
+
export declare const openDatabase: (dbPath: string) => import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof schema> & {
|
|
5
|
+
$client: Database.Database;
|
|
6
|
+
};
|
|
7
|
+
export declare const closeDatabase: (db: AdceDb) => void;
|
|
8
|
+
export declare const getMeta: (db: AdceDb, key: string) => string | null;
|
|
9
|
+
export declare const setMeta: (db: AdceDb, key: string, value: string) => void;
|
package/dist/database.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
3
|
+
import { eq } from "drizzle-orm";
|
|
4
|
+
import * as schema from "./schema.js";
|
|
5
|
+
const INIT_SQL = `
|
|
6
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
7
|
+
key TEXT PRIMARY KEY NOT NULL,
|
|
8
|
+
value TEXT NOT NULL
|
|
9
|
+
);
|
|
10
|
+
CREATE TABLE IF NOT EXISTS artifacts (
|
|
11
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
12
|
+
path TEXT,
|
|
13
|
+
name TEXT NOT NULL,
|
|
14
|
+
type TEXT NOT NULL,
|
|
15
|
+
origin TEXT NOT NULL,
|
|
16
|
+
verification TEXT NOT NULL,
|
|
17
|
+
health TEXT NOT NULL,
|
|
18
|
+
authority TEXT NOT NULL,
|
|
19
|
+
content_hash TEXT,
|
|
20
|
+
size_bytes INTEGER,
|
|
21
|
+
mtime_ms INTEGER,
|
|
22
|
+
created_at TEXT NOT NULL,
|
|
23
|
+
updated_at TEXT NOT NULL
|
|
24
|
+
);
|
|
25
|
+
CREATE UNIQUE INDEX IF NOT EXISTS artifacts_path_unique
|
|
26
|
+
ON artifacts(path)
|
|
27
|
+
WHERE path IS NOT NULL;
|
|
28
|
+
CREATE TABLE IF NOT EXISTS scans (
|
|
29
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
30
|
+
mode TEXT NOT NULL,
|
|
31
|
+
started_at TEXT NOT NULL,
|
|
32
|
+
finished_at TEXT NOT NULL,
|
|
33
|
+
files_seen INTEGER NOT NULL,
|
|
34
|
+
artifacts_upserted INTEGER NOT NULL,
|
|
35
|
+
unchanged INTEGER NOT NULL,
|
|
36
|
+
changed INTEGER NOT NULL,
|
|
37
|
+
added INTEGER NOT NULL,
|
|
38
|
+
removed INTEGER NOT NULL,
|
|
39
|
+
git_detected INTEGER NOT NULL
|
|
40
|
+
);
|
|
41
|
+
CREATE TABLE IF NOT EXISTS relationships (
|
|
42
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
43
|
+
source_artifact_id TEXT NOT NULL,
|
|
44
|
+
target_artifact_id TEXT NOT NULL,
|
|
45
|
+
type TEXT NOT NULL,
|
|
46
|
+
origin TEXT NOT NULL,
|
|
47
|
+
confidence TEXT NOT NULL,
|
|
48
|
+
verification TEXT NOT NULL,
|
|
49
|
+
evidence TEXT,
|
|
50
|
+
created_at TEXT NOT NULL,
|
|
51
|
+
updated_at TEXT NOT NULL
|
|
52
|
+
);
|
|
53
|
+
CREATE UNIQUE INDEX IF NOT EXISTS relationships_unique_edge
|
|
54
|
+
ON relationships(source_artifact_id, target_artifact_id, type);
|
|
55
|
+
CREATE TABLE IF NOT EXISTS conflicts (
|
|
56
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
57
|
+
category TEXT NOT NULL,
|
|
58
|
+
lifecycle TEXT NOT NULL,
|
|
59
|
+
confidence TEXT NOT NULL,
|
|
60
|
+
severity TEXT NOT NULL,
|
|
61
|
+
source_artifact_id TEXT,
|
|
62
|
+
target_artifact_id TEXT,
|
|
63
|
+
relationship_id TEXT,
|
|
64
|
+
summary TEXT NOT NULL,
|
|
65
|
+
evidence TEXT,
|
|
66
|
+
created_at TEXT NOT NULL,
|
|
67
|
+
updated_at TEXT NOT NULL
|
|
68
|
+
);
|
|
69
|
+
CREATE UNIQUE INDEX IF NOT EXISTS conflicts_unique_edge
|
|
70
|
+
ON conflicts(category, relationship_id)
|
|
71
|
+
WHERE relationship_id IS NOT NULL;
|
|
72
|
+
`;
|
|
73
|
+
export const openDatabase = (dbPath) => {
|
|
74
|
+
const sqlite = new Database(dbPath);
|
|
75
|
+
sqlite.pragma("journal_mode = WAL");
|
|
76
|
+
sqlite.exec(INIT_SQL);
|
|
77
|
+
return drizzle(sqlite, { schema });
|
|
78
|
+
};
|
|
79
|
+
export const closeDatabase = (db) => {
|
|
80
|
+
db.$client.close();
|
|
81
|
+
};
|
|
82
|
+
export const getMeta = (db, key) => {
|
|
83
|
+
const row = db
|
|
84
|
+
.select()
|
|
85
|
+
.from(schema.meta)
|
|
86
|
+
.where(eq(schema.meta.key, key))
|
|
87
|
+
.get();
|
|
88
|
+
return row?.value ?? null;
|
|
89
|
+
};
|
|
90
|
+
export const setMeta = (db, key, value) => {
|
|
91
|
+
db.insert(schema.meta)
|
|
92
|
+
.values({ key, value })
|
|
93
|
+
.onConflictDoUpdate({
|
|
94
|
+
target: schema.meta.key,
|
|
95
|
+
set: { value },
|
|
96
|
+
})
|
|
97
|
+
.run();
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEhB,CAAC;AAIF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE;IAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAQ,EAAE;IAChD,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,GAAW,EAAiB,EAAE;IAChE,MAAM,GAAG,GAAG,EAAE;SACX,MAAM,EAAE;SACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;SACjB,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SAC/B,GAAG,EAAE,CAAC;IACT,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,GAAW,EAAE,KAAa,EAAQ,EAAE;IACtE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;SACnB,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;SACtB,kBAAkB,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QACvB,GAAG,EAAE,EAAE,KAAK,EAAE;KACf,CAAC;SACD,GAAG,EAAE,CAAC;AACX,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { listArtifacts, setArtifactHealth } from "./artifact-repository.js";
|
|
2
|
+
import { listConflicts } from "./conflict-repository.js";
|
|
3
|
+
/**
|
|
4
|
+
* Mark artifacts involved in open conflicts as CONFLICTING;
|
|
5
|
+
* clear CONFLICTING when they no longer appear in open conflicts.
|
|
6
|
+
*/
|
|
7
|
+
export const syncArtifactHealthFromConflicts = (db) => {
|
|
8
|
+
const open = listConflicts(db, { includeClosed: false });
|
|
9
|
+
const conflictingIds = new Set();
|
|
10
|
+
for (const c of open) {
|
|
11
|
+
if (c.sourceArtifactId)
|
|
12
|
+
conflictingIds.add(c.sourceArtifactId);
|
|
13
|
+
if (c.targetArtifactId)
|
|
14
|
+
conflictingIds.add(c.targetArtifactId);
|
|
15
|
+
}
|
|
16
|
+
for (const artifact of listArtifacts(db)) {
|
|
17
|
+
const shouldConflict = conflictingIds.has(artifact.id);
|
|
18
|
+
if (shouldConflict && artifact.health !== "CONFLICTING") {
|
|
19
|
+
setArtifactHealth(db, artifact.id, "CONFLICTING");
|
|
20
|
+
}
|
|
21
|
+
else if (!shouldConflict &&
|
|
22
|
+
artifact.health === "CONFLICTING") {
|
|
23
|
+
setArtifactHealth(db, artifact.id, "UNKNOWN");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=health-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-sync.js","sourceRoot":"","sources":["../src/health-sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,EAAU,EAAQ,EAAE;IAClE,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,gBAAgB;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAC,gBAAgB;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACxD,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC;aAAM,IACL,CAAC,cAAc;YACf,QAAQ,CAAC,MAAM,KAAK,aAAa,EACjC,CAAC;YACD,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { openDatabase, closeDatabase, getMeta, setMeta, type AdceDb, } from "./database.js";
|
|
2
|
+
export * from "./schema.js";
|
|
3
|
+
export * from "./artifact-repository.js";
|
|
4
|
+
export * from "./scan-repository.js";
|
|
5
|
+
export * from "./relationship-repository.js";
|
|
6
|
+
export * from "./conflict-repository.js";
|
|
7
|
+
export * from "./health-sync.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { openDatabase, closeDatabase, getMeta, setMeta, } from "./database.js";
|
|
2
|
+
export * from "./schema.js";
|
|
3
|
+
export * from "./artifact-repository.js";
|
|
4
|
+
export * from "./scan-repository.js";
|
|
5
|
+
export * from "./relationship-repository.js";
|
|
6
|
+
export * from "./conflict-repository.js";
|
|
7
|
+
export * from "./health-sync.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,OAAO,EACP,OAAO,GAER,MAAM,eAAe,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|