@yadsh/dsh-user-correction-miner 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/README.md +68 -0
- package/compatibility.json +16 -0
- package/cordis.patch.yml +4 -0
- package/lib/config.d.ts +109 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +80 -0
- package/lib/config.js.map +1 -0
- package/lib/dsh/commands.d.ts +25 -0
- package/lib/dsh/commands.d.ts.map +1 -0
- package/lib/dsh/commands.js +69 -0
- package/lib/dsh/commands.js.map +1 -0
- package/lib/dsh/lifecycle.d.ts +5 -0
- package/lib/dsh/lifecycle.d.ts.map +1 -0
- package/lib/dsh/lifecycle.js +10 -0
- package/lib/dsh/lifecycle.js.map +1 -0
- package/lib/dsh/plugin.d.ts +11 -0
- package/lib/dsh/plugin.d.ts.map +1 -0
- package/lib/dsh/plugin.js +58 -0
- package/lib/dsh/plugin.js.map +1 -0
- package/lib/dsh/sessions.d.ts +14 -0
- package/lib/dsh/sessions.d.ts.map +1 -0
- package/lib/dsh/sessions.js +27 -0
- package/lib/dsh/sessions.js.map +1 -0
- package/lib/dsh/storage.d.ts +108 -0
- package/lib/dsh/storage.d.ts.map +1 -0
- package/lib/dsh/storage.js +159 -0
- package/lib/dsh/storage.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/mining/context-extractor.d.ts +9 -0
- package/lib/mining/context-extractor.d.ts.map +1 -0
- package/lib/mining/context-extractor.js +75 -0
- package/lib/mining/context-extractor.js.map +1 -0
- package/lib/mining/engine.d.ts +39 -0
- package/lib/mining/engine.d.ts.map +1 -0
- package/lib/mining/engine.js +241 -0
- package/lib/mining/engine.js.map +1 -0
- package/lib/mining/message-text.d.ts +4 -0
- package/lib/mining/message-text.d.ts.map +1 -0
- package/lib/mining/message-text.js +14 -0
- package/lib/mining/message-text.js.map +1 -0
- package/lib/mining/prefilter.d.ts +7 -0
- package/lib/mining/prefilter.d.ts.map +1 -0
- package/lib/mining/prefilter.js +39 -0
- package/lib/mining/prefilter.js.map +1 -0
- package/lib/mining/sanitize.d.ts +3 -0
- package/lib/mining/sanitize.d.ts.map +1 -0
- package/lib/mining/sanitize.js +13 -0
- package/lib/mining/sanitize.js.map +1 -0
- package/lib/mining/scanner.d.ts +14 -0
- package/lib/mining/scanner.d.ts.map +1 -0
- package/lib/mining/scanner.js +25 -0
- package/lib/mining/scanner.js.map +1 -0
- package/lib/mining/text-budget.d.ts +7 -0
- package/lib/mining/text-budget.d.ts.map +1 -0
- package/lib/mining/text-budget.js +34 -0
- package/lib/mining/text-budget.js.map +1 -0
- package/lib/types.d.ts +81 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/hashing.d.ts +3 -0
- package/lib/utils/hashing.d.ts.map +1 -0
- package/lib/utils/hashing.js +8 -0
- package/lib/utils/hashing.js.map +1 -0
- package/lib/utils/workspace.d.ts +4 -0
- package/lib/utils/workspace.d.ts.map +1 -0
- package/lib/utils/workspace.js +14 -0
- package/lib/utils/workspace.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { type Domain } from "@deepseek-ai/dsh-storage-domain";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import type { CorrectionRecord, CorrectionStore, ScanCursor } from "../types.js";
|
|
4
|
+
export declare const correctionRecordSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
sessionId: z.ZodString;
|
|
7
|
+
eventSeq: z.ZodNumber;
|
|
8
|
+
workspaceKey: z.ZodString;
|
|
9
|
+
cwd: z.ZodString;
|
|
10
|
+
text: z.ZodString;
|
|
11
|
+
textDigest: z.ZodString;
|
|
12
|
+
contextDigest: z.ZodString;
|
|
13
|
+
contextEvents: z.ZodArray<z.ZodObject<{
|
|
14
|
+
seq: z.ZodNumber;
|
|
15
|
+
kind: z.ZodEnum<{
|
|
16
|
+
user: "user";
|
|
17
|
+
assistant: "assistant";
|
|
18
|
+
"tool-call": "tool-call";
|
|
19
|
+
"tool-result": "tool-result";
|
|
20
|
+
}>;
|
|
21
|
+
text: z.ZodString;
|
|
22
|
+
}, z.core.$strip>>;
|
|
23
|
+
previousUserEvent: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
previousAssistantEvents: z.ZodArray<z.ZodNumber>;
|
|
25
|
+
previousToolEvents: z.ZodArray<z.ZodNumber>;
|
|
26
|
+
matchedSignals: z.ZodArray<z.ZodString>;
|
|
27
|
+
likelyOneOff: z.ZodBoolean;
|
|
28
|
+
classification: z.ZodOptional<z.ZodObject<{
|
|
29
|
+
isCorrection: z.ZodBoolean;
|
|
30
|
+
confidence: z.ZodNumber;
|
|
31
|
+
target: z.ZodEnum<{
|
|
32
|
+
"file-selection": "file-selection";
|
|
33
|
+
"filesystem-scope": "filesystem-scope";
|
|
34
|
+
"tool-choice": "tool-choice";
|
|
35
|
+
command: "command";
|
|
36
|
+
workflow: "workflow";
|
|
37
|
+
"package-manager": "package-manager";
|
|
38
|
+
git: "git";
|
|
39
|
+
deploy: "deploy";
|
|
40
|
+
style: "style";
|
|
41
|
+
testing: "testing";
|
|
42
|
+
environment: "environment";
|
|
43
|
+
"agent-behavior": "agent-behavior";
|
|
44
|
+
other: "other";
|
|
45
|
+
}>;
|
|
46
|
+
durability: z.ZodEnum<{
|
|
47
|
+
"one-off": "one-off";
|
|
48
|
+
"likely-project-rule": "likely-project-rule";
|
|
49
|
+
"likely-user-rule": "likely-user-rule";
|
|
50
|
+
"likely-skill": "likely-skill";
|
|
51
|
+
uncertain: "uncertain";
|
|
52
|
+
}>;
|
|
53
|
+
severity: z.ZodEnum<{
|
|
54
|
+
workflow: "workflow";
|
|
55
|
+
preference: "preference";
|
|
56
|
+
"destructive-risk": "destructive-risk";
|
|
57
|
+
security: "security";
|
|
58
|
+
}>;
|
|
59
|
+
correctedBehavior: z.ZodOptional<z.ZodString>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
createdAt: z.ZodNumber;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
export declare const scanCursorSchema: z.ZodObject<{
|
|
64
|
+
workspaceKey: z.ZodString;
|
|
65
|
+
lastAnalyzedSession: z.ZodOptional<z.ZodString>;
|
|
66
|
+
lastAnalyzedEventSeq: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
sessionWatermarks: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
68
|
+
updatedAt: z.ZodNumber;
|
|
69
|
+
}, z.core.$strip>;
|
|
70
|
+
/**
|
|
71
|
+
* The Phase 1 domain declares the complete planned table vocabulary now so
|
|
72
|
+
* later phases do not silently reinterpret an existing durable layout.
|
|
73
|
+
*/
|
|
74
|
+
export declare const CORRECTION_MINER_DOMAIN: {
|
|
75
|
+
name: string;
|
|
76
|
+
version: number;
|
|
77
|
+
tables: {
|
|
78
|
+
corrections: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, CorrectionRecord>;
|
|
79
|
+
clusters: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, Record<string, unknown>>;
|
|
80
|
+
candidates: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, Record<string, unknown>>;
|
|
81
|
+
replays: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, Record<string, unknown>>;
|
|
82
|
+
decisions: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, Record<string, unknown>>;
|
|
83
|
+
rule_bindings: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, Record<string, unknown>>;
|
|
84
|
+
scan_cursors: import("@deepseek-ai/dsh-storage-domain").DomainTableSpec<string, ScanCursor>;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
export type CorrectionMinerDomain = Domain<typeof CORRECTION_MINER_DOMAIN>;
|
|
88
|
+
export declare class DomainCorrectionStore implements CorrectionStore {
|
|
89
|
+
private readonly domain;
|
|
90
|
+
constructor(domain: CorrectionMinerDomain);
|
|
91
|
+
getCursor(workspaceKey: string): ScanCursor | undefined;
|
|
92
|
+
putCursor(cursor: ScanCursor): Promise<void>;
|
|
93
|
+
hasCorrection(id: string): boolean;
|
|
94
|
+
putCorrection(record: CorrectionRecord, maxRecordsPerWorkspace: number): Promise<void>;
|
|
95
|
+
countCorrections(workspaceKey: string): number;
|
|
96
|
+
listCorrections(workspaceKey: string, limit?: number): readonly CorrectionRecord[];
|
|
97
|
+
}
|
|
98
|
+
export declare class MemoryCorrectionStore implements CorrectionStore {
|
|
99
|
+
private readonly corrections;
|
|
100
|
+
private readonly cursors;
|
|
101
|
+
getCursor(workspaceKey: string): ScanCursor | undefined;
|
|
102
|
+
putCursor(cursor: ScanCursor): Promise<void>;
|
|
103
|
+
hasCorrection(id: string): boolean;
|
|
104
|
+
putCorrection(record: CorrectionRecord, maxRecordsPerWorkspace: number): Promise<void>;
|
|
105
|
+
countCorrections(workspaceKey: string): number;
|
|
106
|
+
listCorrections(workspaceKey: string, limit?: number): readonly CorrectionRecord[];
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/dsh/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqCjF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBjC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;iBAM3B,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;CAYlC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,qBAAa,qBAAsB,YAAW,eAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,qBAAqB;IAE1D,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvD,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5F,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ9C,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,gBAAgB,EAAE;CAO/E;AAED,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAKjD,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5F,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ9C,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,gBAAgB,EAAE;CAO/E"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { defineDomain, domainTable } from "@deepseek-ai/dsh-storage-domain";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const classificationSchema = z.object({
|
|
4
|
+
isCorrection: z.boolean(),
|
|
5
|
+
confidence: z.number().min(0).max(1),
|
|
6
|
+
target: z.enum([
|
|
7
|
+
"file-selection",
|
|
8
|
+
"filesystem-scope",
|
|
9
|
+
"tool-choice",
|
|
10
|
+
"command",
|
|
11
|
+
"workflow",
|
|
12
|
+
"package-manager",
|
|
13
|
+
"git",
|
|
14
|
+
"deploy",
|
|
15
|
+
"style",
|
|
16
|
+
"testing",
|
|
17
|
+
"environment",
|
|
18
|
+
"agent-behavior",
|
|
19
|
+
"other",
|
|
20
|
+
]),
|
|
21
|
+
durability: z.enum([
|
|
22
|
+
"one-off",
|
|
23
|
+
"likely-project-rule",
|
|
24
|
+
"likely-user-rule",
|
|
25
|
+
"likely-skill",
|
|
26
|
+
"uncertain",
|
|
27
|
+
]),
|
|
28
|
+
severity: z.enum(["preference", "workflow", "destructive-risk", "security"]),
|
|
29
|
+
correctedBehavior: z.string().optional(),
|
|
30
|
+
});
|
|
31
|
+
const contextEventSchema = z.object({
|
|
32
|
+
seq: z.number().int().nonnegative(),
|
|
33
|
+
kind: z.enum(["user", "assistant", "tool-call", "tool-result"]),
|
|
34
|
+
text: z.string(),
|
|
35
|
+
});
|
|
36
|
+
export const correctionRecordSchema = z.object({
|
|
37
|
+
id: z.string(),
|
|
38
|
+
sessionId: z.string(),
|
|
39
|
+
eventSeq: z.number().int().nonnegative(),
|
|
40
|
+
workspaceKey: z.string(),
|
|
41
|
+
cwd: z.string(),
|
|
42
|
+
text: z.string(),
|
|
43
|
+
textDigest: z.string(),
|
|
44
|
+
contextDigest: z.string(),
|
|
45
|
+
contextEvents: z.array(contextEventSchema),
|
|
46
|
+
previousUserEvent: z.number().int().nonnegative().optional(),
|
|
47
|
+
previousAssistantEvents: z.array(z.number().int().nonnegative()),
|
|
48
|
+
previousToolEvents: z.array(z.number().int().nonnegative()),
|
|
49
|
+
matchedSignals: z.array(z.string()),
|
|
50
|
+
likelyOneOff: z.boolean(),
|
|
51
|
+
classification: classificationSchema.optional(),
|
|
52
|
+
createdAt: z.number().int().nonnegative(),
|
|
53
|
+
});
|
|
54
|
+
export const scanCursorSchema = z.object({
|
|
55
|
+
workspaceKey: z.string(),
|
|
56
|
+
lastAnalyzedSession: z.string().optional(),
|
|
57
|
+
lastAnalyzedEventSeq: z.number().int().nonnegative().optional(),
|
|
58
|
+
sessionWatermarks: z.record(z.string(), z.number().int()),
|
|
59
|
+
updatedAt: z.number().int().nonnegative(),
|
|
60
|
+
});
|
|
61
|
+
const futureRecordSchema = z.record(z.string(), z.unknown());
|
|
62
|
+
/**
|
|
63
|
+
* The Phase 1 domain declares the complete planned table vocabulary now so
|
|
64
|
+
* later phases do not silently reinterpret an existing durable layout.
|
|
65
|
+
*/
|
|
66
|
+
export const CORRECTION_MINER_DOMAIN = defineDomain({
|
|
67
|
+
name: "dsh_user_correction_miner",
|
|
68
|
+
version: 1,
|
|
69
|
+
tables: {
|
|
70
|
+
corrections: domainTable(correctionRecordSchema),
|
|
71
|
+
clusters: domainTable(futureRecordSchema),
|
|
72
|
+
candidates: domainTable(futureRecordSchema),
|
|
73
|
+
replays: domainTable(futureRecordSchema),
|
|
74
|
+
decisions: domainTable(futureRecordSchema),
|
|
75
|
+
rule_bindings: domainTable(futureRecordSchema),
|
|
76
|
+
scan_cursors: domainTable(scanCursorSchema),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
export class DomainCorrectionStore {
|
|
80
|
+
domain;
|
|
81
|
+
constructor(domain) {
|
|
82
|
+
this.domain = domain;
|
|
83
|
+
}
|
|
84
|
+
getCursor(workspaceKey) {
|
|
85
|
+
return this.domain.table("scan_cursors").get(workspaceKey);
|
|
86
|
+
}
|
|
87
|
+
putCursor(cursor) {
|
|
88
|
+
return this.domain.table("scan_cursors").put(cursor.workspaceKey, cursor);
|
|
89
|
+
}
|
|
90
|
+
hasCorrection(id) {
|
|
91
|
+
return this.domain.table("corrections").get(id) !== undefined;
|
|
92
|
+
}
|
|
93
|
+
async putCorrection(record, maxRecordsPerWorkspace) {
|
|
94
|
+
const table = this.domain.table("corrections");
|
|
95
|
+
await table.put(record.id, record);
|
|
96
|
+
const workspaceRecords = oldestWorkspaceRecords(table.entries(), record.workspaceKey);
|
|
97
|
+
const excess = workspaceRecords.slice(0, Math.max(0, workspaceRecords.length - maxRecordsPerWorkspace));
|
|
98
|
+
await Promise.all(excess.map(([id]) => table.delete(id)));
|
|
99
|
+
}
|
|
100
|
+
countCorrections(workspaceKey) {
|
|
101
|
+
let count = 0;
|
|
102
|
+
for (const [, record] of this.domain.table("corrections").entries()) {
|
|
103
|
+
if (record.workspaceKey === workspaceKey)
|
|
104
|
+
count += 1;
|
|
105
|
+
}
|
|
106
|
+
return count;
|
|
107
|
+
}
|
|
108
|
+
listCorrections(workspaceKey, limit = 50) {
|
|
109
|
+
return [...this.domain.table("corrections").entries()]
|
|
110
|
+
.map(([, record]) => record)
|
|
111
|
+
.filter((record) => record.workspaceKey === workspaceKey)
|
|
112
|
+
.sort((left, right) => right.createdAt - left.createdAt || right.eventSeq - left.eventSeq)
|
|
113
|
+
.slice(0, limit);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export class MemoryCorrectionStore {
|
|
117
|
+
corrections = new Map();
|
|
118
|
+
cursors = new Map();
|
|
119
|
+
getCursor(workspaceKey) {
|
|
120
|
+
const cursor = this.cursors.get(workspaceKey);
|
|
121
|
+
return cursor === undefined ? undefined : structuredClone(cursor);
|
|
122
|
+
}
|
|
123
|
+
async putCursor(cursor) {
|
|
124
|
+
this.cursors.set(cursor.workspaceKey, structuredClone(cursor));
|
|
125
|
+
}
|
|
126
|
+
hasCorrection(id) {
|
|
127
|
+
return this.corrections.has(id);
|
|
128
|
+
}
|
|
129
|
+
async putCorrection(record, maxRecordsPerWorkspace) {
|
|
130
|
+
this.corrections.set(record.id, structuredClone(record));
|
|
131
|
+
const workspaceRecords = oldestWorkspaceRecords(this.corrections.entries(), record.workspaceKey);
|
|
132
|
+
const excess = workspaceRecords.slice(0, Math.max(0, workspaceRecords.length - maxRecordsPerWorkspace));
|
|
133
|
+
for (const [id] of excess)
|
|
134
|
+
this.corrections.delete(id);
|
|
135
|
+
}
|
|
136
|
+
countCorrections(workspaceKey) {
|
|
137
|
+
let count = 0;
|
|
138
|
+
for (const record of this.corrections.values()) {
|
|
139
|
+
if (record.workspaceKey === workspaceKey)
|
|
140
|
+
count += 1;
|
|
141
|
+
}
|
|
142
|
+
return count;
|
|
143
|
+
}
|
|
144
|
+
listCorrections(workspaceKey, limit = 50) {
|
|
145
|
+
return [...this.corrections.values()]
|
|
146
|
+
.filter((record) => record.workspaceKey === workspaceKey)
|
|
147
|
+
.sort((left, right) => right.createdAt - left.createdAt || right.eventSeq - left.eventSeq)
|
|
148
|
+
.slice(0, limit)
|
|
149
|
+
.map((record) => structuredClone(record));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function oldestWorkspaceRecords(records, workspaceKey) {
|
|
153
|
+
return [...records]
|
|
154
|
+
.filter(([, record]) => record.workspaceKey === workspaceKey)
|
|
155
|
+
.sort(([leftId, left], [rightId, right]) => left.createdAt - right.createdAt ||
|
|
156
|
+
left.eventSeq - right.eventSeq ||
|
|
157
|
+
leftId.localeCompare(rightId));
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/dsh/storage.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { Config, DEFAULT_CONFIG, resolveConfig } from "./config.js";
|
|
2
|
+
export type { ResolvedUserCorrectionMinerConfig, UserCorrectionMinerConfig, } from "./config.js";
|
|
3
|
+
export * from "./types.js";
|
|
4
|
+
export { CorrectionMinerEngine } from "./mining/engine.js";
|
|
5
|
+
export type { MinerLogger, SessionSourceLike } from "./mining/engine.js";
|
|
6
|
+
export { prefilterCorrection } from "./mining/prefilter.js";
|
|
7
|
+
export type { CorrectionPrefilterResult } from "./mining/prefilter.js";
|
|
8
|
+
export { extractCorrectionEvidence } from "./mining/context-extractor.js";
|
|
9
|
+
export { scanSession } from "./mining/scanner.js";
|
|
10
|
+
export type { SessionScanResult, SessionSnapshot } from "./mining/scanner.js";
|
|
11
|
+
export { CORRECTION_MINER_DOMAIN, DomainCorrectionStore, MemoryCorrectionStore, } from "./dsh/storage.js";
|
|
12
|
+
export { createSessionSource, SessionSource } from "./dsh/sessions.js";
|
|
13
|
+
export { createCorrectionsCommand } from "./dsh/commands.js";
|
|
14
|
+
export { apply, inject, name } from "./dsh/plugin.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpE,YAAY,EACV,iCAAiC,EACjC,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Config, DEFAULT_CONFIG, resolveConfig } from "./config.js";
|
|
2
|
+
export * from "./types.js";
|
|
3
|
+
export { CorrectionMinerEngine } from "./mining/engine.js";
|
|
4
|
+
export { prefilterCorrection } from "./mining/prefilter.js";
|
|
5
|
+
export { extractCorrectionEvidence } from "./mining/context-extractor.js";
|
|
6
|
+
export { scanSession } from "./mining/scanner.js";
|
|
7
|
+
export { CORRECTION_MINER_DOMAIN, DomainCorrectionStore, MemoryCorrectionStore, } from "./dsh/storage.js";
|
|
8
|
+
export { createSessionSource, SessionSource } from "./dsh/sessions.js";
|
|
9
|
+
export { createCorrectionsCommand } from "./dsh/commands.js";
|
|
10
|
+
export { apply, inject, name } from "./dsh/plugin.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKpE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SessionEvent, SessionHeader } from "@deepseek-ai/dsh-session";
|
|
2
|
+
import type { CorrectionEvidence } from "../types.js";
|
|
3
|
+
import type { CorrectionPrefilterResult } from "./prefilter.js";
|
|
4
|
+
export interface ContextLimits {
|
|
5
|
+
readonly maxContextEvents: number;
|
|
6
|
+
readonly maxContextBytes: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function extractCorrectionEvidence(header: SessionHeader, events: readonly SessionEvent[], correctionIndex: number, prefilter: CorrectionPrefilterResult, limits: ContextLimits): CorrectionEvidence;
|
|
9
|
+
//# sourceMappingURL=context-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-extractor.d.ts","sourceRoot":"","sources":["../../src/mining/context-extractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAA0B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AA2BD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,yBAAyB,EACpC,MAAM,EAAE,aAAa,GACpB,kBAAkB,CA4CpB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Buffer } from "node:buffer";
|
|
2
|
+
import { sha256 } from "../utils/hashing.js";
|
|
3
|
+
import { isDirectUserMessage, messageText } from "./message-text.js";
|
|
4
|
+
import { truncateText } from "./text-budget.js";
|
|
5
|
+
function fitUtf8(text, maxBytes) {
|
|
6
|
+
return truncateText(text, maxBytes, "utf8-bytes");
|
|
7
|
+
}
|
|
8
|
+
function summarize(event) {
|
|
9
|
+
switch (event.type) {
|
|
10
|
+
case "user/message": {
|
|
11
|
+
if (!isDirectUserMessage(event.data))
|
|
12
|
+
return undefined;
|
|
13
|
+
return { seq: event.seq, kind: "user", text: messageText(event.data) };
|
|
14
|
+
}
|
|
15
|
+
case "assistant/message":
|
|
16
|
+
return { seq: event.seq, kind: "assistant", text: messageText(event.data.message) };
|
|
17
|
+
case "tool/call":
|
|
18
|
+
return {
|
|
19
|
+
seq: event.seq,
|
|
20
|
+
kind: "tool-call",
|
|
21
|
+
text: `${event.data.name} ${event.data.arguments}`.trim(),
|
|
22
|
+
};
|
|
23
|
+
case "tool/result":
|
|
24
|
+
return { seq: event.seq, kind: "tool-result", text: messageText(event.data.message) };
|
|
25
|
+
default:
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function extractCorrectionEvidence(header, events, correctionIndex, prefilter, limits) {
|
|
30
|
+
const correction = events[correctionIndex];
|
|
31
|
+
if (correction?.type !== "user/message" || !isDirectUserMessage(correction.data)) {
|
|
32
|
+
throw new TypeError("correctionIndex must point to a direct user/message event");
|
|
33
|
+
}
|
|
34
|
+
const userText = messageText(correction.data);
|
|
35
|
+
const newestFirst = [];
|
|
36
|
+
let remainingBytes = limits.maxContextBytes;
|
|
37
|
+
for (let index = correctionIndex - 1; index >= 0 && newestFirst.length < limits.maxContextEvents; index -= 1) {
|
|
38
|
+
const event = events[index];
|
|
39
|
+
if (event === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
const summary = summarize(event);
|
|
42
|
+
if (summary === undefined)
|
|
43
|
+
continue;
|
|
44
|
+
const text = fitUtf8(summary.text, remainingBytes);
|
|
45
|
+
if (text.length === 0)
|
|
46
|
+
break;
|
|
47
|
+
newestFirst.push({ ...summary, text });
|
|
48
|
+
remainingBytes -= Buffer.byteLength(text, "utf8");
|
|
49
|
+
if (summary.kind === "user")
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
const contextEvents = newestFirst.reverse();
|
|
53
|
+
const previousUser = contextEvents.find((event) => event.kind === "user")?.seq;
|
|
54
|
+
const previousAssistantEvents = contextEvents
|
|
55
|
+
.filter((event) => event.kind === "assistant")
|
|
56
|
+
.map((event) => event.seq);
|
|
57
|
+
const previousToolEvents = contextEvents
|
|
58
|
+
.filter((event) => event.kind === "tool-call" || event.kind === "tool-result")
|
|
59
|
+
.map((event) => event.seq);
|
|
60
|
+
return {
|
|
61
|
+
sessionId: String(header.id),
|
|
62
|
+
userEventSeq: correction.seq,
|
|
63
|
+
userText,
|
|
64
|
+
...(previousUser === undefined ? {} : { previousUserEvent: previousUser }),
|
|
65
|
+
previousAssistantEvents,
|
|
66
|
+
previousToolEvents,
|
|
67
|
+
contextEvents,
|
|
68
|
+
contextDigest: sha256(JSON.stringify(contextEvents)),
|
|
69
|
+
cwd: header.cwd ?? "",
|
|
70
|
+
timestamp: correction.time,
|
|
71
|
+
matchedSignals: prefilter.signals,
|
|
72
|
+
likelyOneOff: prefilter.likelyOneOff,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=context-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-extractor.js","sourceRoot":"","sources":["../../src/mining/context-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Session, SessionEvent } from "@deepseek-ai/dsh-session";
|
|
2
|
+
import type { SessionLogSnapshot, SessionRecord } from "@deepseek-ai/dsh-session-query";
|
|
3
|
+
import type { ResolvedUserCorrectionMinerConfig } from "../config.js";
|
|
4
|
+
import type { CorrectionRecord, CorrectionStore, ScanReport, ScanRequest } from "../types.js";
|
|
5
|
+
export interface SessionSourceLike {
|
|
6
|
+
list(request: ScanRequest, signal?: AbortSignal): Promise<SessionRecord[]>;
|
|
7
|
+
read(sessionId: string): Promise<SessionLogSnapshot>;
|
|
8
|
+
}
|
|
9
|
+
export interface MinerLogger {
|
|
10
|
+
debug(event: string, fields?: Record<string, unknown>): void;
|
|
11
|
+
info(event: string, fields?: Record<string, unknown>): void;
|
|
12
|
+
warn(event: string, fields?: Record<string, unknown>): void;
|
|
13
|
+
error(event: string, fields?: Record<string, unknown>): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class CorrectionMinerEngine {
|
|
16
|
+
private readonly source;
|
|
17
|
+
private readonly store;
|
|
18
|
+
private readonly config;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
private readonly now;
|
|
21
|
+
private readonly pending;
|
|
22
|
+
private readonly workspaceQueues;
|
|
23
|
+
constructor(source: SessionSourceLike, store: CorrectionStore, config: ResolvedUserCorrectionMinerConfig, logger: MinerLogger, now?: () => number);
|
|
24
|
+
scan(request: ScanRequest, signal?: AbortSignal): Promise<ScanReport>;
|
|
25
|
+
observeEvent(session: Session, event: SessionEvent): void;
|
|
26
|
+
observeDisposed(session: Session): void;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
count(cwd: string): number;
|
|
29
|
+
list(cwd: string, limit?: number): readonly CorrectionRecord[];
|
|
30
|
+
private scheduleLiveSession;
|
|
31
|
+
private runHistoricalScan;
|
|
32
|
+
private runSnapshot;
|
|
33
|
+
private toRecord;
|
|
34
|
+
private enqueue;
|
|
35
|
+
private createPendingSession;
|
|
36
|
+
private evictExpired;
|
|
37
|
+
private warnPendingEviction;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/mining/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACxF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAEV,gBAAgB,EAChB,eAAe,EAEf,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAQrB,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAeD,qBAAa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IARtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuC;gBAGpD,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,iCAAiC,EACzC,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,MAAM,MAAiB;IAG/C,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAKrE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAuBzD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMvC,OAAO,IAAI,IAAI;IAIf,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI1B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,gBAAgB,EAAE;IAI1D,OAAO,CAAC,mBAAmB;YAuBb,iBAAiB;YAwCjB,WAAW;IAqCzB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,mBAAmB;CAY5B"}
|