@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.
Files changed (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -0
  3. package/compatibility.json +16 -0
  4. package/cordis.patch.yml +4 -0
  5. package/lib/config.d.ts +109 -0
  6. package/lib/config.d.ts.map +1 -0
  7. package/lib/config.js +80 -0
  8. package/lib/config.js.map +1 -0
  9. package/lib/dsh/commands.d.ts +25 -0
  10. package/lib/dsh/commands.d.ts.map +1 -0
  11. package/lib/dsh/commands.js +69 -0
  12. package/lib/dsh/commands.js.map +1 -0
  13. package/lib/dsh/lifecycle.d.ts +5 -0
  14. package/lib/dsh/lifecycle.d.ts.map +1 -0
  15. package/lib/dsh/lifecycle.js +10 -0
  16. package/lib/dsh/lifecycle.js.map +1 -0
  17. package/lib/dsh/plugin.d.ts +11 -0
  18. package/lib/dsh/plugin.d.ts.map +1 -0
  19. package/lib/dsh/plugin.js +58 -0
  20. package/lib/dsh/plugin.js.map +1 -0
  21. package/lib/dsh/sessions.d.ts +14 -0
  22. package/lib/dsh/sessions.d.ts.map +1 -0
  23. package/lib/dsh/sessions.js +27 -0
  24. package/lib/dsh/sessions.js.map +1 -0
  25. package/lib/dsh/storage.d.ts +108 -0
  26. package/lib/dsh/storage.d.ts.map +1 -0
  27. package/lib/dsh/storage.js +159 -0
  28. package/lib/dsh/storage.js.map +1 -0
  29. package/lib/index.d.ts +15 -0
  30. package/lib/index.d.ts.map +1 -0
  31. package/lib/index.js +11 -0
  32. package/lib/index.js.map +1 -0
  33. package/lib/mining/context-extractor.d.ts +9 -0
  34. package/lib/mining/context-extractor.d.ts.map +1 -0
  35. package/lib/mining/context-extractor.js +75 -0
  36. package/lib/mining/context-extractor.js.map +1 -0
  37. package/lib/mining/engine.d.ts +39 -0
  38. package/lib/mining/engine.d.ts.map +1 -0
  39. package/lib/mining/engine.js +241 -0
  40. package/lib/mining/engine.js.map +1 -0
  41. package/lib/mining/message-text.d.ts +4 -0
  42. package/lib/mining/message-text.d.ts.map +1 -0
  43. package/lib/mining/message-text.js +14 -0
  44. package/lib/mining/message-text.js.map +1 -0
  45. package/lib/mining/prefilter.d.ts +7 -0
  46. package/lib/mining/prefilter.d.ts.map +1 -0
  47. package/lib/mining/prefilter.js +39 -0
  48. package/lib/mining/prefilter.js.map +1 -0
  49. package/lib/mining/sanitize.d.ts +3 -0
  50. package/lib/mining/sanitize.d.ts.map +1 -0
  51. package/lib/mining/sanitize.js +13 -0
  52. package/lib/mining/sanitize.js.map +1 -0
  53. package/lib/mining/scanner.d.ts +14 -0
  54. package/lib/mining/scanner.d.ts.map +1 -0
  55. package/lib/mining/scanner.js +25 -0
  56. package/lib/mining/scanner.js.map +1 -0
  57. package/lib/mining/text-budget.d.ts +7 -0
  58. package/lib/mining/text-budget.d.ts.map +1 -0
  59. package/lib/mining/text-budget.js +34 -0
  60. package/lib/mining/text-budget.js.map +1 -0
  61. package/lib/types.d.ts +81 -0
  62. package/lib/types.d.ts.map +1 -0
  63. package/lib/types.js +2 -0
  64. package/lib/types.js.map +1 -0
  65. package/lib/utils/hashing.d.ts +3 -0
  66. package/lib/utils/hashing.d.ts.map +1 -0
  67. package/lib/utils/hashing.js +8 -0
  68. package/lib/utils/hashing.js.map +1 -0
  69. package/lib/utils/workspace.d.ts +4 -0
  70. package/lib/utils/workspace.d.ts.map +1 -0
  71. package/lib/utils/workspace.js +14 -0
  72. package/lib/utils/workspace.js.map +1 -0
  73. 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
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOhD,SAAS,OAAO,CAAC,IAAY,EAAE,QAAgB;IAC7C,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,KAAmB;IACpC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACvD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,KAAK,mBAAmB;YACtB,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtF,KAAK,WAAW;YACd,OAAO;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE;aAC1D,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxF;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,MAA+B,EAC/B,eAAuB,EACvB,SAAoC,EACpC,MAAqB;IAErB,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,UAAU,EAAE,IAAI,KAAK,cAAc,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,IAAI,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;IAE5C,KAAK,IAAI,KAAK,GAAG,eAAe,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7G,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,SAAS;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAC7B,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,cAAc,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM;IACrC,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC;IAC/E,MAAM,uBAAuB,GAAG,aAAa;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;SAC7C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,kBAAkB,GAAG,aAAa;SACrC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;SAC7E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,YAAY,EAAE,UAAU,CAAC,GAAG;QAC5B,QAAQ;QACR,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;QAC1E,uBAAuB;QACvB,kBAAkB;QAClB,aAAa;QACb,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACpD,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;QACrB,SAAS,EAAE,UAAU,CAAC,IAAI;QAC1B,cAAc,EAAE,SAAS,CAAC,OAAO;QACjC,YAAY,EAAE,SAAS,CAAC,YAAY;KACrC,CAAC;AACJ,CAAC"}
@@ -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"}