ds4-context-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/README.md +80 -0
- package/dist/artifacts/artifact-manager.d.ts +58 -0
- package/dist/artifacts/artifact-manager.d.ts.map +1 -0
- package/dist/artifacts/artifact-manager.js +445 -0
- package/dist/artifacts/artifact-manager.js.map +1 -0
- package/dist/artifacts/artifact-store.d.ts +33 -0
- package/dist/artifacts/artifact-store.d.ts.map +1 -0
- package/dist/artifacts/artifact-store.js +116 -0
- package/dist/artifacts/artifact-store.js.map +1 -0
- package/dist/compaction/compaction-record.d.ts +74 -0
- package/dist/compaction/compaction-record.d.ts.map +1 -0
- package/dist/compaction/compaction-record.js +113 -0
- package/dist/compaction/compaction-record.js.map +1 -0
- package/dist/compaction/summary-contract.d.ts +68 -0
- package/dist/compaction/summary-contract.d.ts.map +1 -0
- package/dist/compaction/summary-contract.js +315 -0
- package/dist/compaction/summary-contract.js.map +1 -0
- package/dist/compaction/summary-graph.d.ts +48 -0
- package/dist/compaction/summary-graph.d.ts.map +1 -0
- package/dist/compaction/summary-graph.js +123 -0
- package/dist/compaction/summary-graph.js.map +1 -0
- package/dist/config/config-loader.d.ts +18 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +305 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/config.d.ts +113 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +89 -0
- package/dist/config/config.js.map +1 -0
- package/dist/continuation/native-continuation.d.ts +107 -0
- package/dist/continuation/native-continuation.d.ts.map +1 -0
- package/dist/continuation/native-continuation.js +374 -0
- package/dist/continuation/native-continuation.js.map +1 -0
- package/dist/core/budget-manager.d.ts +26 -0
- package/dist/core/budget-manager.d.ts.map +1 -0
- package/dist/core/budget-manager.js +42 -0
- package/dist/core/budget-manager.js.map +1 -0
- package/dist/core/canonical-message.d.ts +69 -0
- package/dist/core/canonical-message.d.ts.map +1 -0
- package/dist/core/canonical-message.js +2 -0
- package/dist/core/canonical-message.js.map +1 -0
- package/dist/core/model-awareness.d.ts +59 -0
- package/dist/core/model-awareness.d.ts.map +1 -0
- package/dist/core/model-awareness.js +177 -0
- package/dist/core/model-awareness.js.map +1 -0
- package/dist/core/model-profile.d.ts +27 -0
- package/dist/core/model-profile.d.ts.map +1 -0
- package/dist/core/model-profile.js +29 -0
- package/dist/core/model-profile.js.map +1 -0
- package/dist/core/token-estimator.d.ts +4 -0
- package/dist/core/token-estimator.d.ts.map +1 -0
- package/dist/core/token-estimator.js +64 -0
- package/dist/core/token-estimator.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/context-manifest.d.ts +163 -0
- package/dist/manifest/context-manifest.d.ts.map +1 -0
- package/dist/manifest/context-manifest.js +2 -0
- package/dist/manifest/context-manifest.js.map +1 -0
- package/dist/manifest/observer.d.ts +63 -0
- package/dist/manifest/observer.d.ts.map +1 -0
- package/dist/manifest/observer.js +150 -0
- package/dist/manifest/observer.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +112 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +499 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-types.d.ts +126 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +73 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/persistence/migrations.d.ts +17 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +588 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/repositories/artifact-repository.d.ts +50 -0
- package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/artifact-repository.js +186 -0
- package/dist/persistence/repositories/artifact-repository.js.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts +19 -0
- package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/context-manifest-repository.js +144 -0
- package/dist/persistence/repositories/context-manifest-repository.js.map +1 -0
- package/dist/persistence/repositories/memory-repository.d.ts +33 -0
- package/dist/persistence/repositories/memory-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/memory-repository.js +429 -0
- package/dist/persistence/repositories/memory-repository.js.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts +65 -0
- package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/project-knowledge-repository.js +248 -0
- package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -0
- package/dist/persistence/repositories/session-index-repository.d.ts +81 -0
- package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/session-index-repository.js +220 -0
- package/dist/persistence/repositories/session-index-repository.js.map +1 -0
- package/dist/persistence/repositories/summary-repository.d.ts +16 -0
- package/dist/persistence/repositories/summary-repository.d.ts.map +1 -0
- package/dist/persistence/repositories/summary-repository.js +242 -0
- package/dist/persistence/repositories/summary-repository.js.map +1 -0
- package/dist/persistence/sqlite.d.ts +45 -0
- package/dist/persistence/sqlite.d.ts.map +1 -0
- package/dist/persistence/sqlite.js +137 -0
- package/dist/persistence/sqlite.js.map +1 -0
- package/dist/planner/atomic-groups.d.ts +15 -0
- package/dist/planner/atomic-groups.d.ts.map +1 -0
- package/dist/planner/atomic-groups.js +177 -0
- package/dist/planner/atomic-groups.js.map +1 -0
- package/dist/planner/context-planner.d.ts +49 -0
- package/dist/planner/context-planner.d.ts.map +1 -0
- package/dist/planner/context-planner.js +367 -0
- package/dist/planner/context-planner.js.map +1 -0
- package/dist/privacy/privacy-policy.d.ts +58 -0
- package/dist/privacy/privacy-policy.d.ts.map +1 -0
- package/dist/privacy/privacy-policy.js +412 -0
- package/dist/privacy/privacy-policy.js.map +1 -0
- package/dist/project/file-indexer.d.ts +32 -0
- package/dist/project/file-indexer.d.ts.map +1 -0
- package/dist/project/file-indexer.js +374 -0
- package/dist/project/file-indexer.js.map +1 -0
- package/dist/project/git-state.d.ts +12 -0
- package/dist/project/git-state.d.ts.map +1 -0
- package/dist/project/git-state.js +109 -0
- package/dist/project/git-state.js.map +1 -0
- package/dist/project/project-knowledge.d.ts +63 -0
- package/dist/project/project-knowledge.d.ts.map +1 -0
- package/dist/project/project-knowledge.js +332 -0
- package/dist/project/project-knowledge.js.map +1 -0
- package/dist/retrieval/retrieval-engine.d.ts +55 -0
- package/dist/retrieval/retrieval-engine.d.ts.map +1 -0
- package/dist/retrieval/retrieval-engine.js +290 -0
- package/dist/retrieval/retrieval-engine.js.map +1 -0
- package/dist/retrieval/task-descriptor.d.ts +17 -0
- package/dist/retrieval/task-descriptor.d.ts.map +1 -0
- package/dist/retrieval/task-descriptor.js +107 -0
- package/dist/retrieval/task-descriptor.js.map +1 -0
- package/dist/shared/hash.d.ts +2 -0
- package/dist/shared/hash.d.ts.map +1 -0
- package/dist/shared/hash.js +5 -0
- package/dist/shared/hash.js.map +1 -0
- package/dist/shared/logging.d.ts +27 -0
- package/dist/shared/logging.d.ts.map +1 -0
- package/dist/shared/logging.js +83 -0
- package/dist/shared/logging.js.map +1 -0
- package/dist/shared/stable-json.d.ts +2 -0
- package/dist/shared/stable-json.d.ts.map +1 -0
- package/dist/shared/stable-json.js +38 -0
- package/dist/shared/stable-json.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface StoredArtifactObject {
|
|
2
|
+
sha256: string;
|
|
3
|
+
filePath: string;
|
|
4
|
+
mimeType: string;
|
|
5
|
+
sizeBytes: number;
|
|
6
|
+
createdAt: number;
|
|
7
|
+
verifiedAt: number;
|
|
8
|
+
deduplicated: boolean;
|
|
9
|
+
repaired: boolean;
|
|
10
|
+
}
|
|
11
|
+
export type ArtifactVerification = {
|
|
12
|
+
status: "available";
|
|
13
|
+
content: Buffer;
|
|
14
|
+
verifiedAt: number;
|
|
15
|
+
} | {
|
|
16
|
+
status: "missing";
|
|
17
|
+
verifiedAt: number;
|
|
18
|
+
} | {
|
|
19
|
+
status: "corrupt";
|
|
20
|
+
verifiedAt: number;
|
|
21
|
+
actualSha256: string;
|
|
22
|
+
};
|
|
23
|
+
export declare class FileArtifactStore {
|
|
24
|
+
private readonly now;
|
|
25
|
+
private readonly idGenerator;
|
|
26
|
+
readonly root: string;
|
|
27
|
+
constructor(root: string, now?: () => number, idGenerator?: () => string);
|
|
28
|
+
put(content: Uint8Array, mimeType: string): StoredArtifactObject;
|
|
29
|
+
verify(digest: string, maxBytes?: number): ArtifactVerification;
|
|
30
|
+
remove(digest: string): void;
|
|
31
|
+
pathFor(digest: string): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=artifact-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.d.ts","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAWpE,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAL9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGpB,IAAI,EAAE,MAAM,EACK,GAAG,GAAE,MAAM,MAAiB,EAC5B,WAAW,GAAE,MAAM,MAAmB;IAOzD,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IA+DhE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,oBAAoB;IAe/D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAIhC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { chmodSync, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { sha256 } from "../shared/hash.js";
|
|
5
|
+
const SHA256_PATTERN = /^[0-9a-f]{64}$/u;
|
|
6
|
+
function bestEffortChmod(path, mode) {
|
|
7
|
+
try {
|
|
8
|
+
chmodSync(path, mode);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const code = error && typeof error === "object" && "code" in error ? String(error.code) : "";
|
|
12
|
+
if (!["ENOSYS", "EPERM", "EINVAL"].includes(code))
|
|
13
|
+
throw error;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class FileArtifactStore {
|
|
17
|
+
now;
|
|
18
|
+
idGenerator;
|
|
19
|
+
root;
|
|
20
|
+
constructor(root, now = Date.now, idGenerator = randomUUID) {
|
|
21
|
+
this.now = now;
|
|
22
|
+
this.idGenerator = idGenerator;
|
|
23
|
+
this.root = resolve(root);
|
|
24
|
+
mkdirSync(this.root, { recursive: true, mode: 0o700 });
|
|
25
|
+
bestEffortChmod(this.root, 0o700);
|
|
26
|
+
}
|
|
27
|
+
put(content, mimeType) {
|
|
28
|
+
const buffer = Buffer.from(content);
|
|
29
|
+
const digest = sha256(buffer);
|
|
30
|
+
const directory = join(this.root, digest.slice(0, 2));
|
|
31
|
+
const filePath = join(directory, digest);
|
|
32
|
+
const createdAt = this.now();
|
|
33
|
+
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
34
|
+
bestEffortChmod(directory, 0o700);
|
|
35
|
+
let repaired = false;
|
|
36
|
+
let quarantinePath;
|
|
37
|
+
if (existsSync(filePath)) {
|
|
38
|
+
const existing = this.verify(digest);
|
|
39
|
+
if (existing.status === "available") {
|
|
40
|
+
return {
|
|
41
|
+
sha256: digest,
|
|
42
|
+
filePath,
|
|
43
|
+
mimeType,
|
|
44
|
+
sizeBytes: buffer.byteLength,
|
|
45
|
+
createdAt,
|
|
46
|
+
verifiedAt: existing.verifiedAt,
|
|
47
|
+
deduplicated: true,
|
|
48
|
+
repaired: false,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
quarantinePath = `${filePath}.corrupt-${this.idGenerator().replace(/[^A-Za-z0-9_-]/gu, "")}`;
|
|
52
|
+
renameSync(filePath, quarantinePath);
|
|
53
|
+
repaired = true;
|
|
54
|
+
}
|
|
55
|
+
const temporaryPath = join(directory, `.tmp-${this.idGenerator().replace(/[^A-Za-z0-9_-]/gu, "")}`);
|
|
56
|
+
let descriptor;
|
|
57
|
+
try {
|
|
58
|
+
descriptor = openSync(temporaryPath, "wx", 0o600);
|
|
59
|
+
writeFileSync(descriptor, buffer);
|
|
60
|
+
fsyncSync(descriptor);
|
|
61
|
+
closeSync(descriptor);
|
|
62
|
+
descriptor = undefined;
|
|
63
|
+
renameSync(temporaryPath, filePath);
|
|
64
|
+
bestEffortChmod(filePath, 0o600);
|
|
65
|
+
if (quarantinePath)
|
|
66
|
+
rmSync(quarantinePath, { force: true });
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (quarantinePath && existsSync(quarantinePath) && !existsSync(filePath)) {
|
|
70
|
+
renameSync(quarantinePath, filePath);
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
if (descriptor !== undefined)
|
|
76
|
+
closeSync(descriptor);
|
|
77
|
+
rmSync(temporaryPath, { force: true });
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
sha256: digest,
|
|
81
|
+
filePath,
|
|
82
|
+
mimeType,
|
|
83
|
+
sizeBytes: buffer.byteLength,
|
|
84
|
+
createdAt,
|
|
85
|
+
verifiedAt: this.now(),
|
|
86
|
+
deduplicated: false,
|
|
87
|
+
repaired,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
verify(digest, maxBytes) {
|
|
91
|
+
const filePath = this.pathFor(digest);
|
|
92
|
+
const verifiedAt = this.now();
|
|
93
|
+
if (!existsSync(filePath))
|
|
94
|
+
return { status: "missing", verifiedAt };
|
|
95
|
+
const stat = lstatSync(filePath);
|
|
96
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
97
|
+
return { status: "corrupt", verifiedAt, actualSha256: "non-regular-file" };
|
|
98
|
+
if (maxBytes !== undefined && stat.size > maxBytes) {
|
|
99
|
+
throw new Error(`Artifact ${digest} exceeds the ${maxBytes} byte read limit`);
|
|
100
|
+
}
|
|
101
|
+
const content = readFileSync(filePath);
|
|
102
|
+
const actualSha256 = sha256(content);
|
|
103
|
+
if (actualSha256 !== digest)
|
|
104
|
+
return { status: "corrupt", verifiedAt, actualSha256 };
|
|
105
|
+
return { status: "available", content, verifiedAt };
|
|
106
|
+
}
|
|
107
|
+
remove(digest) {
|
|
108
|
+
rmSync(this.pathFor(digest), { force: true });
|
|
109
|
+
}
|
|
110
|
+
pathFor(digest) {
|
|
111
|
+
if (!SHA256_PATTERN.test(digest))
|
|
112
|
+
throw new Error("Artifact SHA-256 must be 64 lowercase hexadecimal characters");
|
|
113
|
+
return join(this.root, digest.slice(0, 2), digest);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=artifact-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../../src/artifacts/artifact-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { SummaryValidationStatus } from "./summary-contract.ts";
|
|
2
|
+
export type CompactionTrigger = "manual" | "threshold" | "overflow" | "proactive";
|
|
3
|
+
export type SummaryLifecycleStatus = "prepared" | "committed" | "failed";
|
|
4
|
+
export type SummaryKind = "segment" | "aggregate" | "task-state" | "branch";
|
|
5
|
+
export interface EmbeddedSummaryNode {
|
|
6
|
+
id: string;
|
|
7
|
+
kind: SummaryKind;
|
|
8
|
+
content: string;
|
|
9
|
+
sourceHash: string;
|
|
10
|
+
sourceEntryIds: string[];
|
|
11
|
+
childSummaryIds: string[];
|
|
12
|
+
graphLevel: number;
|
|
13
|
+
createdAt: number;
|
|
14
|
+
validationStatus: SummaryValidationStatus;
|
|
15
|
+
validationIssueCodes: string[];
|
|
16
|
+
provider?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Canonical metadata stored in Pi's CompactionEntry.details.
|
|
21
|
+
*
|
|
22
|
+
* Schema v1 records from M4 are normalized as level-zero segment nodes.
|
|
23
|
+
* Schema v2 adds graph topology plus any nodes created alongside the active
|
|
24
|
+
* summary. The active node content remains CompactionEntry.summary.
|
|
25
|
+
*/
|
|
26
|
+
export interface Ds4CompactionMetadata {
|
|
27
|
+
schemaVersion: 1 | 2;
|
|
28
|
+
contractVersion: 1;
|
|
29
|
+
summaryId: string;
|
|
30
|
+
sourceHash: string;
|
|
31
|
+
sourceEntryIds: string[];
|
|
32
|
+
validationStatus: SummaryValidationStatus;
|
|
33
|
+
validationIssueCodes: string[];
|
|
34
|
+
firstKeptEntryId: string;
|
|
35
|
+
tokensBefore: number;
|
|
36
|
+
reason: CompactionTrigger;
|
|
37
|
+
isSplitTurn: boolean;
|
|
38
|
+
messageCount: number;
|
|
39
|
+
generatedAt: number;
|
|
40
|
+
provider: string;
|
|
41
|
+
model: string;
|
|
42
|
+
summaryKind: SummaryKind;
|
|
43
|
+
childSummaryIds: string[];
|
|
44
|
+
graphLevel: number;
|
|
45
|
+
segmentSummaryId: string;
|
|
46
|
+
embeddedNodes: EmbeddedSummaryNode[];
|
|
47
|
+
}
|
|
48
|
+
export interface Ds4CompactionDetails {
|
|
49
|
+
readFiles: string[];
|
|
50
|
+
modifiedFiles: string[];
|
|
51
|
+
ds4ContextEngine: Ds4CompactionMetadata;
|
|
52
|
+
}
|
|
53
|
+
export interface SummaryRecord {
|
|
54
|
+
id: string;
|
|
55
|
+
sessionId: string;
|
|
56
|
+
kind: SummaryKind;
|
|
57
|
+
content: string;
|
|
58
|
+
sourceHash: string;
|
|
59
|
+
sourceEntryIds: string[];
|
|
60
|
+
childSummaryIds: string[];
|
|
61
|
+
graphLevel: number;
|
|
62
|
+
createdAt: number;
|
|
63
|
+
validationStatus: SummaryValidationStatus;
|
|
64
|
+
provider?: string;
|
|
65
|
+
model?: string;
|
|
66
|
+
firstKeptEntryId: string;
|
|
67
|
+
tokensBefore: number;
|
|
68
|
+
reason: CompactionTrigger;
|
|
69
|
+
lifecycleStatus: SummaryLifecycleStatus;
|
|
70
|
+
piCompactionEntryId?: string;
|
|
71
|
+
metadata: Ds4CompactionMetadata;
|
|
72
|
+
}
|
|
73
|
+
export declare function parseDs4CompactionDetails(value: unknown): Ds4CompactionDetails | undefined;
|
|
74
|
+
//# sourceMappingURL=compaction-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-record.d.ts","sourceRoot":"","sources":["../../src/compaction/compaction-record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAClF,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,eAAe,EAAE,CAAC,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,EAAE,sBAAsB,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAsDD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAqE1F"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
function isRecord(value) {
|
|
2
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
3
|
+
}
|
|
4
|
+
function stringArray(value) {
|
|
5
|
+
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
6
|
+
}
|
|
7
|
+
function summaryKind(value) {
|
|
8
|
+
return ["segment", "aggregate", "task-state", "branch"].includes(String(value));
|
|
9
|
+
}
|
|
10
|
+
function validationStatus(value) {
|
|
11
|
+
return ["valid", "warning", "invalid"].includes(String(value));
|
|
12
|
+
}
|
|
13
|
+
function parseEmbeddedNode(value) {
|
|
14
|
+
if (!isRecord(value))
|
|
15
|
+
return undefined;
|
|
16
|
+
if (typeof value.id !== "string"
|
|
17
|
+
|| !summaryKind(value.kind)
|
|
18
|
+
|| typeof value.content !== "string"
|
|
19
|
+
|| typeof value.sourceHash !== "string"
|
|
20
|
+
|| !stringArray(value.sourceEntryIds)
|
|
21
|
+
|| !stringArray(value.childSummaryIds)
|
|
22
|
+
|| typeof value.graphLevel !== "number"
|
|
23
|
+
|| !Number.isInteger(value.graphLevel)
|
|
24
|
+
|| value.graphLevel < 0
|
|
25
|
+
|| typeof value.createdAt !== "number"
|
|
26
|
+
|| !validationStatus(value.validationStatus)
|
|
27
|
+
|| !stringArray(value.validationIssueCodes)
|
|
28
|
+
|| (value.provider !== undefined && typeof value.provider !== "string")
|
|
29
|
+
|| (value.model !== undefined && typeof value.model !== "string")) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
id: value.id,
|
|
34
|
+
kind: value.kind,
|
|
35
|
+
content: value.content,
|
|
36
|
+
sourceHash: value.sourceHash,
|
|
37
|
+
sourceEntryIds: [...value.sourceEntryIds],
|
|
38
|
+
childSummaryIds: [...value.childSummaryIds],
|
|
39
|
+
graphLevel: value.graphLevel,
|
|
40
|
+
createdAt: value.createdAt,
|
|
41
|
+
validationStatus: value.validationStatus,
|
|
42
|
+
validationIssueCodes: [...value.validationIssueCodes],
|
|
43
|
+
...(value.provider ? { provider: value.provider } : {}),
|
|
44
|
+
...(value.model ? { model: value.model } : {}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function parseDs4CompactionDetails(value) {
|
|
48
|
+
if (!isRecord(value) || !isRecord(value.ds4ContextEngine))
|
|
49
|
+
return undefined;
|
|
50
|
+
const metadata = value.ds4ContextEngine;
|
|
51
|
+
const schemaVersion = metadata.schemaVersion;
|
|
52
|
+
if ((schemaVersion !== 1 && schemaVersion !== 2)
|
|
53
|
+
|| metadata.contractVersion !== 1
|
|
54
|
+
|| typeof metadata.summaryId !== "string"
|
|
55
|
+
|| typeof metadata.sourceHash !== "string"
|
|
56
|
+
|| !stringArray(metadata.sourceEntryIds)
|
|
57
|
+
|| !validationStatus(metadata.validationStatus)
|
|
58
|
+
|| !stringArray(metadata.validationIssueCodes)
|
|
59
|
+
|| typeof metadata.firstKeptEntryId !== "string"
|
|
60
|
+
|| typeof metadata.tokensBefore !== "number"
|
|
61
|
+
|| !["manual", "threshold", "overflow", "proactive"].includes(String(metadata.reason))
|
|
62
|
+
|| typeof metadata.isSplitTurn !== "boolean"
|
|
63
|
+
|| typeof metadata.messageCount !== "number"
|
|
64
|
+
|| typeof metadata.generatedAt !== "number"
|
|
65
|
+
|| typeof metadata.provider !== "string"
|
|
66
|
+
|| typeof metadata.model !== "string") {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const kind = schemaVersion === 2 ? metadata.summaryKind : "segment";
|
|
70
|
+
const children = schemaVersion === 2 ? metadata.childSummaryIds : [];
|
|
71
|
+
const level = schemaVersion === 2 ? metadata.graphLevel : 0;
|
|
72
|
+
const segmentSummaryId = schemaVersion === 2 ? metadata.segmentSummaryId : metadata.summaryId;
|
|
73
|
+
const rawEmbedded = schemaVersion === 2 ? metadata.embeddedNodes : [];
|
|
74
|
+
if (!summaryKind(kind)
|
|
75
|
+
|| !stringArray(children)
|
|
76
|
+
|| typeof level !== "number"
|
|
77
|
+
|| !Number.isInteger(level)
|
|
78
|
+
|| level < 0
|
|
79
|
+
|| typeof segmentSummaryId !== "string"
|
|
80
|
+
|| !Array.isArray(rawEmbedded)) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const embeddedNodes = rawEmbedded.map(parseEmbeddedNode);
|
|
84
|
+
if (embeddedNodes.some((node) => !node))
|
|
85
|
+
return undefined;
|
|
86
|
+
return {
|
|
87
|
+
readFiles: stringArray(value.readFiles) ? [...value.readFiles] : [],
|
|
88
|
+
modifiedFiles: stringArray(value.modifiedFiles) ? [...value.modifiedFiles] : [],
|
|
89
|
+
ds4ContextEngine: {
|
|
90
|
+
schemaVersion,
|
|
91
|
+
contractVersion: 1,
|
|
92
|
+
summaryId: metadata.summaryId,
|
|
93
|
+
sourceHash: metadata.sourceHash,
|
|
94
|
+
sourceEntryIds: [...metadata.sourceEntryIds],
|
|
95
|
+
validationStatus: metadata.validationStatus,
|
|
96
|
+
validationIssueCodes: [...metadata.validationIssueCodes],
|
|
97
|
+
firstKeptEntryId: metadata.firstKeptEntryId,
|
|
98
|
+
tokensBefore: metadata.tokensBefore,
|
|
99
|
+
reason: metadata.reason,
|
|
100
|
+
isSplitTurn: metadata.isSplitTurn,
|
|
101
|
+
messageCount: metadata.messageCount,
|
|
102
|
+
generatedAt: metadata.generatedAt,
|
|
103
|
+
provider: metadata.provider,
|
|
104
|
+
model: metadata.model,
|
|
105
|
+
summaryKind: kind,
|
|
106
|
+
childSummaryIds: [...children],
|
|
107
|
+
graphLevel: level,
|
|
108
|
+
segmentSummaryId,
|
|
109
|
+
embeddedNodes: embeddedNodes,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=compaction-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-record.js","sourceRoot":"","sources":["../../src/compaction/compaction-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export declare const SUMMARY_CONTRACT_VERSION = 1;
|
|
2
|
+
export declare const REQUIRED_SUMMARY_SECTIONS: readonly ["Objective", "User Constraints", "Durable Decisions", "Completed Work", "Current State", "Files Read", "Files Modified", "Commands / Tests", "Errors / Risks", "Open Questions", "Next Actions", "Critical Exact Values"];
|
|
3
|
+
export type SummaryValidationStatus = "valid" | "warning" | "invalid";
|
|
4
|
+
export interface SummaryValidationIssue {
|
|
5
|
+
code: string;
|
|
6
|
+
severity: "warning" | "error";
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SummaryValidationResult {
|
|
10
|
+
status: SummaryValidationStatus;
|
|
11
|
+
issues: SummaryValidationIssue[];
|
|
12
|
+
}
|
|
13
|
+
export interface SummaryPromptInput {
|
|
14
|
+
conversationText: string;
|
|
15
|
+
previousSummary?: string;
|
|
16
|
+
customInstructions?: string;
|
|
17
|
+
readFiles: readonly string[];
|
|
18
|
+
modifiedFiles: readonly string[];
|
|
19
|
+
isSplitTurn: boolean;
|
|
20
|
+
purpose?: "segment" | "aggregate";
|
|
21
|
+
}
|
|
22
|
+
export interface AggregateSummaryChild {
|
|
23
|
+
id: string;
|
|
24
|
+
kind: string;
|
|
25
|
+
content: string;
|
|
26
|
+
sourceHash: string;
|
|
27
|
+
graphLevel: number;
|
|
28
|
+
}
|
|
29
|
+
export interface AggregateSummaryPromptInput {
|
|
30
|
+
children: readonly AggregateSummaryChild[];
|
|
31
|
+
customInstructions?: string;
|
|
32
|
+
readFiles: readonly string[];
|
|
33
|
+
modifiedFiles: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export interface SummaryValidationInput {
|
|
36
|
+
sourceText: string;
|
|
37
|
+
readFiles: readonly string[];
|
|
38
|
+
modifiedFiles: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Replace only well-formed, unique file sections with Pi's sanitized file-operation
|
|
42
|
+
* evidence. The model still owns every semantic section; DS4 owns these inventories
|
|
43
|
+
* so grouped prose or invented paths can never pass as file provenance.
|
|
44
|
+
*/
|
|
45
|
+
export declare function groundSummaryFileSections(summary: string, input: Pick<SummaryValidationInput, "readFiles" | "modifiedFiles">): string;
|
|
46
|
+
export interface ExactValuePruneResult {
|
|
47
|
+
content: string;
|
|
48
|
+
removedBullets: number;
|
|
49
|
+
removedCharacters: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reject unsupported exact claims at bullet granularity. This is deliberately
|
|
53
|
+
* conservative: malformed prose, excessive removals, or unsupported values outside
|
|
54
|
+
* a bullet remain invalid and fall back to Pi rather than being silently rewritten.
|
|
55
|
+
*/
|
|
56
|
+
export declare function pruneUnsupportedExactValueBullets(summary: string, input: SummaryValidationInput): ExactValuePruneResult | undefined;
|
|
57
|
+
export declare function buildSummaryPrompt(input: SummaryPromptInput): string;
|
|
58
|
+
export declare function buildAggregateSummaryPrompt(input: AggregateSummaryPromptInput): string;
|
|
59
|
+
export declare function computeSummarySourceHash(input: {
|
|
60
|
+
conversationText: string;
|
|
61
|
+
previousSummary?: string;
|
|
62
|
+
sourceEntryIds: readonly string[];
|
|
63
|
+
readFiles?: readonly string[];
|
|
64
|
+
modifiedFiles?: readonly string[];
|
|
65
|
+
}): string;
|
|
66
|
+
export declare function computeAggregateSourceHash(children: readonly AggregateSummaryChild[]): string;
|
|
67
|
+
export declare function validateSummary(summary: string, input: SummaryValidationInput): SummaryValidationResult;
|
|
68
|
+
//# sourceMappingURL=summary-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-contract.d.ts","sourceRoot":"","sources":["../../src/compaction/summary-contract.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,eAAO,MAAM,yBAAyB,qOAa5B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAmCD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,eAAe,CAAC,GACjE,MAAM,CAiBR;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAoCD;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,sBAAsB,GAC5B,qBAAqB,GAAG,SAAS,CAiEnC;AA+BD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAiDpE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,2BAA2B,GAAG,MAAM,CActF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,MAAM,CAQT;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,GAAG,MAAM,CAO7F;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,CAqEzB"}
|