pi-smart-compact 8.0.0 → 8.0.2
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/CHANGELOG.md +15 -0
- package/dist/constants.d.ts +1 -1
- package/dist/index.js +44 -13
- package/dist/phases/verify.d.ts.map +1 -1
- package/dist/provider-eval.js +6 -2
- package/dist/provider-scenario-eval.js +20 -4
- package/dist/telemetry-report.js +6 -2
- package/dist/utils/extraction.d.ts +1 -0
- package/dist/utils/extraction.d.ts.map +1 -1
- package/dist/utils/file-ref-detect.d.ts.map +1 -1
- package/dist/utils/state.d.ts +1 -0
- package/dist/utils/state.d.ts.map +1 -1
- package/docs/MIGRATING_TO_V8.md +6 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
No changes yet.
|
|
6
6
|
|
|
7
|
+
## [8.0.2] - 2026-08-07
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Done/error contradiction detection now associates an unresolved error with a completed file only when the error's first line directly identifies that file. Later grep/context output mentioning the filename no longer creates a false contradiction.
|
|
12
|
+
- Legacy source-search output persisted as unresolved errors/open loops by older RCs is filtered on load and before persistence.
|
|
13
|
+
|
|
14
|
+
## [8.0.1] - 2026-08-07
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Legacy rc.2 continuity state now drops diagnostic `npm error`/`npm notice` text that had been persisted as a user prohibition, both when loaded and before future persistence.
|
|
19
|
+
- Remote registry URLs such as `https://registry.npmjs.org/` are no longer interpreted as local file references.
|
|
20
|
+
- File paths present inside trusted error/constraint/decision/goal continuity evidence are grounded during verification, so deterministically preserved legacy errors cannot create fabricated-file gaps.
|
|
21
|
+
|
|
7
22
|
## [8.0.0] - 2026-08-07
|
|
8
23
|
|
|
9
24
|
### Added
|
package/dist/constants.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { CompressionProfile, ProfileConfig } from "./types.ts";
|
|
|
8
8
|
* `package.json#version`. Do not hand-edit this line for releases; bump
|
|
9
9
|
* package.json and run `bun run sync-version`.
|
|
10
10
|
*/
|
|
11
|
-
export declare const VERSION = "8.0.
|
|
11
|
+
export declare const VERSION = "8.0.2";
|
|
12
12
|
export declare const CHARS_PER_TOKEN = 3.8;
|
|
13
13
|
export declare const COMPACT_SYSTEM_PREFIX: string;
|
|
14
14
|
export declare const PROFILES: Record<CompressionProfile, ProfileConfig>;
|
package/dist/index.js
CHANGED
|
@@ -130,7 +130,7 @@ var init_mode_policy = __esm(() => {
|
|
|
130
130
|
});
|
|
131
131
|
|
|
132
132
|
// src/constants.ts
|
|
133
|
-
var VERSION = "8.0.
|
|
133
|
+
var VERSION = "8.0.2", CHARS_PER_TOKEN = 3.8, COMPACT_SYSTEM_PREFIX, PROFILES, DEFAULT_CONFIG, NO_OP_RE, SHIFT_RE, CHOICE_RE, SINGLE_PASS_PREFIX, SINGLE_PASS_SUFFIX = `
|
|
134
134
|
{PREV_CONTEXT}
|
|
135
135
|
|
|
136
136
|
{EXTRACTION_CONTEXT}
|
|
@@ -1154,7 +1154,7 @@ var init_tool_semantics = __esm(() => {
|
|
|
1154
1154
|
|
|
1155
1155
|
// src/utils/file-ref-detect.ts
|
|
1156
1156
|
function isLikelyFileRef(candidate) {
|
|
1157
|
-
if (VERSION_RE.test(candidate))
|
|
1157
|
+
if (candidate.startsWith("//") || VERSION_RE.test(candidate))
|
|
1158
1158
|
return false;
|
|
1159
1159
|
if (candidate.includes("/")) {
|
|
1160
1160
|
const last = candidate.split("/").pop() ?? "";
|
|
@@ -1387,6 +1387,10 @@ function extractDecisions(msgs, _tcIdx) {
|
|
|
1387
1387
|
}
|
|
1388
1388
|
return decisions;
|
|
1389
1389
|
}
|
|
1390
|
+
function isDiagnosticConstraintText(text) {
|
|
1391
|
+
const candidate = text.replace(/^\s*[-*]\s+/, "").trim();
|
|
1392
|
+
return /^(?:\[[^\]]+\]\s*)?(?:npm\s+(?:error|warn|notice|audit|verbose|info)\b|(?:rg|grep):|command exited\b)/i.test(candidate);
|
|
1393
|
+
}
|
|
1390
1394
|
function mineConstraints(msgs) {
|
|
1391
1395
|
const constraints = [];
|
|
1392
1396
|
const seen = new Set;
|
|
@@ -1398,7 +1402,7 @@ function mineConstraints(msgs) {
|
|
|
1398
1402
|
continue;
|
|
1399
1403
|
for (const raw of text.split(/\n+/)) {
|
|
1400
1404
|
const candidate = raw.replace(/^\s*[-*]\s+/, "").trim();
|
|
1401
|
-
if (candidate.length < 10 ||
|
|
1405
|
+
if (candidate.length < 10 || isDiagnosticConstraintText(candidate))
|
|
1402
1406
|
continue;
|
|
1403
1407
|
for (const { re, cat, conf } of CONSTRAINT_PATTERNS) {
|
|
1404
1408
|
if (!re.test(candidate))
|
|
@@ -3820,6 +3824,18 @@ import fs5 from "fs";
|
|
|
3820
3824
|
function getStatePath(projectId, state) {
|
|
3821
3825
|
return state?.scope?.sessionId ? scopedCompactionStateFile(projectId, state.scope.sessionId) : compactionStateFile(projectId);
|
|
3822
3826
|
}
|
|
3827
|
+
function isLegacySearchOutput(text) {
|
|
3828
|
+
const firstLine = text.trim().split(/\r?\n/, 1)[0] ?? "";
|
|
3829
|
+
return /^[^\s:][^:]*:\d+(?::\d+)?:/.test(firstLine);
|
|
3830
|
+
}
|
|
3831
|
+
function sanitizeCompactionStateEvidence(state) {
|
|
3832
|
+
const constraints = state.constraints.filter((item) => !isDiagnosticConstraintText(item.text));
|
|
3833
|
+
const unresolvedErrors = state.unresolvedErrors.filter((item) => !isLegacySearchOutput(item.message));
|
|
3834
|
+
const openLoops = state.openLoops.filter((item) => !isLegacySearchOutput(item.summary));
|
|
3835
|
+
if (constraints.length === state.constraints.length && unresolvedErrors.length === state.unresolvedErrors.length && openLoops.length === state.openLoops.length)
|
|
3836
|
+
return state;
|
|
3837
|
+
return { ...state, constraints, unresolvedErrors, openLoops };
|
|
3838
|
+
}
|
|
3823
3839
|
function freshState(fp, data) {
|
|
3824
3840
|
if (!data)
|
|
3825
3841
|
return null;
|
|
@@ -3832,11 +3848,11 @@ function freshState(fp, data) {
|
|
|
3832
3848
|
updatedAt = 0;
|
|
3833
3849
|
}
|
|
3834
3850
|
}
|
|
3835
|
-
return Date.now() - updatedAt > SEVEN_DAYS_MS ? null : data;
|
|
3851
|
+
return Date.now() - updatedAt > SEVEN_DAYS_MS ? null : sanitizeCompactionStateEvidence(data);
|
|
3836
3852
|
}
|
|
3837
3853
|
function saveCompactionState(projectId, state) {
|
|
3838
3854
|
try {
|
|
3839
|
-
writeJsonSync(getStatePath(projectId, state), state, true);
|
|
3855
|
+
writeJsonSync(getStatePath(projectId, state), sanitizeCompactionStateEvidence(state), true);
|
|
3840
3856
|
} catch (e) {
|
|
3841
3857
|
warn("saveCompactionState failed", e);
|
|
3842
3858
|
}
|
|
@@ -3880,13 +3896,14 @@ function upsertLoopOverride(overrides, loop, patch) {
|
|
|
3880
3896
|
function applyContinuityOverrides(state, overrides) {
|
|
3881
3897
|
const inactive = new Set(overrides.filter((item) => item.status !== "active").map((item) => item.kind + ":" + item.summaryKey));
|
|
3882
3898
|
const replacements = overrides.filter((item) => item.status === "superseded" && item.replacement).map((item) => "Superseded " + item.kind + ": " + item.replacement);
|
|
3899
|
+
const cleanState = sanitizeCompactionStateEvidence(state);
|
|
3883
3900
|
return {
|
|
3884
|
-
...
|
|
3885
|
-
decisions:
|
|
3886
|
-
constraints:
|
|
3887
|
-
unresolvedErrors:
|
|
3888
|
-
openLoops:
|
|
3889
|
-
criticalContext: mergeBy(replacements,
|
|
3901
|
+
...cleanState,
|
|
3902
|
+
decisions: cleanState.decisions.filter((item) => !inactive.has("decision:" + normalizeFactKey(item.summary))),
|
|
3903
|
+
constraints: cleanState.constraints.filter((item) => !inactive.has("constraint:" + normalizeFactKey(item.text))),
|
|
3904
|
+
unresolvedErrors: cleanState.unresolvedErrors.filter((item) => !inactive.has("error:" + normalizeFactKey(item.message))),
|
|
3905
|
+
openLoops: cleanState.openLoops.filter((item) => !inactive.has("loop:" + normalizeFactKey(item.summary))),
|
|
3906
|
+
criticalContext: mergeBy(replacements, cleanState.criticalContext, normalizeFactKey, 20),
|
|
3890
3907
|
factOverrides: overrides
|
|
3891
3908
|
};
|
|
3892
3909
|
}
|
|
@@ -4136,6 +4153,7 @@ function extractCriticalContext(summary) {
|
|
|
4136
4153
|
var init_state = __esm(() => {
|
|
4137
4154
|
init_constants();
|
|
4138
4155
|
init_helpers();
|
|
4156
|
+
init_extraction();
|
|
4139
4157
|
init_logger();
|
|
4140
4158
|
init_paths();
|
|
4141
4159
|
init_fs();
|
|
@@ -7479,6 +7497,7 @@ init_constants();
|
|
|
7479
7497
|
init_cache();
|
|
7480
7498
|
init_tokens();
|
|
7481
7499
|
init_file_ref_detect();
|
|
7500
|
+
init_extraction();
|
|
7482
7501
|
init_file_needles();
|
|
7483
7502
|
init_logger();
|
|
7484
7503
|
init_summary_parse();
|
|
@@ -7660,7 +7679,7 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
7660
7679
|
const constraintEvidence = uniqueByText([
|
|
7661
7680
|
...extraction.constraints.filter((item) => item.confidence >= 0.8).map((item) => ({ text: item.text })),
|
|
7662
7681
|
...(continuity?.constraints ?? []).filter((item) => item.confidence >= 0.8).map((item) => ({ text: item.text }))
|
|
7663
|
-
], (item) => item.text);
|
|
7682
|
+
], (item) => item.text).filter((item) => !isDiagnosticConstraintText(item.text));
|
|
7664
7683
|
const decisionEvidence = uniqueByText([
|
|
7665
7684
|
...extraction.decisions.filter((item) => item.type === "explicit").map((item) => ({ summary: item.summary })),
|
|
7666
7685
|
...(continuity?.decisions ?? []).filter((item) => item.type === "explicit").map((item) => ({ summary: item.summary }))
|
|
@@ -7718,11 +7737,20 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
7718
7737
|
score -= 20;
|
|
7719
7738
|
}
|
|
7720
7739
|
}
|
|
7740
|
+
const groundedEvidenceFiles = [
|
|
7741
|
+
...unresolvedEvidence.map((item) => item.message),
|
|
7742
|
+
...constraintEvidence.map((item) => item.text),
|
|
7743
|
+
...decisionEvidence.map((item) => item.summary),
|
|
7744
|
+
...goalEvidence ? [goalEvidence] : [],
|
|
7745
|
+
...continuity?.openLoops.map((item) => item.summary) ?? [],
|
|
7746
|
+
...continuity?.criticalContext ?? []
|
|
7747
|
+
].flatMap(extractFileRefs);
|
|
7721
7748
|
const knownFiles = Array.from(new Set([
|
|
7722
7749
|
...modifiedPaths,
|
|
7723
7750
|
...extraction.readFiles,
|
|
7724
7751
|
...extraction.deletedFiles,
|
|
7725
7752
|
...extraction.referencedFiles ?? [],
|
|
7753
|
+
...groundedEvidenceFiles,
|
|
7726
7754
|
...continuity?.modifiedFiles ?? [],
|
|
7727
7755
|
...continuity?.readFiles ?? [],
|
|
7728
7756
|
...continuity?.deletedFiles ?? [],
|
|
@@ -7747,7 +7775,10 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
7747
7775
|
const basename = file.path.split("/").pop() ?? "";
|
|
7748
7776
|
if (!doneSection.toLowerCase().includes(basename.toLowerCase()))
|
|
7749
7777
|
continue;
|
|
7750
|
-
const unresolved = unresolvedEvidence.find((error) =>
|
|
7778
|
+
const unresolved = unresolvedEvidence.find((error) => {
|
|
7779
|
+
const firstLine = error.message.split(/\r?\n/, 1)[0] ?? "";
|
|
7780
|
+
return extractFileRefs(firstLine).some((ref) => isKnownPathReference(ref, [file.path]));
|
|
7781
|
+
});
|
|
7751
7782
|
if (unresolved) {
|
|
7752
7783
|
gaps.push({ kind: "inconsistency", detail: basename + " marked Done but has unresolved error" });
|
|
7753
7784
|
score -= 5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAW9G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAYlE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAOpF;AA6FD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAI1E;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,GACxC,kBAAkB,CAqJpB;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EAAE,EACvB,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,GACxC,MAAM,CA8FR;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EAC5F,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
|
package/dist/provider-eval.js
CHANGED
|
@@ -156,7 +156,7 @@ function formatProviderEvaluation(report) {
|
|
|
156
156
|
import fs2 from "fs";
|
|
157
157
|
|
|
158
158
|
// src/constants.ts
|
|
159
|
-
var VERSION = "8.0.
|
|
159
|
+
var VERSION = "8.0.2";
|
|
160
160
|
var COMPACT_SYSTEM_PREFIX = "You are an expert conversation summarizer for a coding agent. " + "Produce structured markdown summaries. " + "Follow output format exactly. " + "Use EXACT names \u2014 never paraphrase code identifiers. " + "Trust deterministic extraction data over intuition.";
|
|
161
161
|
var PROFILES = {
|
|
162
162
|
light: {
|
|
@@ -479,7 +479,7 @@ var CODE_EXT_RE = /\.(ts|tsx|js|jsx|mjs|cjs|rs|py|go|java|rb|cs|cpp|c|h|hpp|swif
|
|
|
479
479
|
var VERSION_RE = /^v?\d+(?:\.\d+)+(?:[-+][\w.-]+)?$/i;
|
|
480
480
|
var FILE_REF_CANDIDATE_RE = /[\w.\/-]+\.[\w]+/g;
|
|
481
481
|
function isLikelyFileRef(candidate) {
|
|
482
|
-
if (VERSION_RE.test(candidate))
|
|
482
|
+
if (candidate.startsWith("//") || VERSION_RE.test(candidate))
|
|
483
483
|
return false;
|
|
484
484
|
if (candidate.includes("/")) {
|
|
485
485
|
const last = candidate.split("/").pop() ?? "";
|
|
@@ -501,6 +501,10 @@ var CONSTRAINT_PATTERNS = [
|
|
|
501
501
|
{ re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|asla\s+(?:kullanma|yapma|getirme))(?![A-Za-z0-9_])/iu, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
|
|
502
502
|
{ re: /(?<![A-Za-z0-9_])(?:tercih|isterim|olsun|kullanal\u0131m|yapal\u0131m|istiyorum)(?![A-Za-z0-9_])/iu, cat: "preference", conf: TUNING.CONFIDENCE_LOW }
|
|
503
503
|
];
|
|
504
|
+
function isDiagnosticConstraintText(text) {
|
|
505
|
+
const candidate = text.replace(/^\s*[-*]\s+/, "").trim();
|
|
506
|
+
return /^(?:\[[^\]]+\]\s*)?(?:npm\s+(?:error|warn|notice|audit|verbose|info)\b|(?:rg|grep):|command exited\b)/i.test(candidate);
|
|
507
|
+
}
|
|
504
508
|
|
|
505
509
|
// src/utils/logger.ts
|
|
506
510
|
var DEBUG = process.env.DEBUG?.includes("smart-compact") ?? false;
|
|
@@ -138,7 +138,7 @@ function getLlmClient() {
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
// src/constants.ts
|
|
141
|
-
var VERSION = "8.0.
|
|
141
|
+
var VERSION = "8.0.2";
|
|
142
142
|
var COMPACT_SYSTEM_PREFIX = "You are an expert conversation summarizer for a coding agent. " + "Produce structured markdown summaries. " + "Follow output format exactly. " + "Use EXACT names \u2014 never paraphrase code identifiers. " + "Trust deterministic extraction data over intuition.";
|
|
143
143
|
var PROFILES = {
|
|
144
144
|
light: {
|
|
@@ -464,7 +464,7 @@ var CODE_EXT_RE = /\.(ts|tsx|js|jsx|mjs|cjs|rs|py|go|java|rb|cs|cpp|c|h|hpp|swif
|
|
|
464
464
|
var VERSION_RE = /^v?\d+(?:\.\d+)+(?:[-+][\w.-]+)?$/i;
|
|
465
465
|
var FILE_REF_CANDIDATE_RE = /[\w.\/-]+\.[\w]+/g;
|
|
466
466
|
function isLikelyFileRef(candidate) {
|
|
467
|
-
if (VERSION_RE.test(candidate))
|
|
467
|
+
if (candidate.startsWith("//") || VERSION_RE.test(candidate))
|
|
468
468
|
return false;
|
|
469
469
|
if (candidate.includes("/")) {
|
|
470
470
|
const last = candidate.split("/").pop() ?? "";
|
|
@@ -486,6 +486,10 @@ var CONSTRAINT_PATTERNS = [
|
|
|
486
486
|
{ re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|asla\s+(?:kullanma|yapma|getirme))(?![A-Za-z0-9_])/iu, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
|
|
487
487
|
{ re: /(?<![A-Za-z0-9_])(?:tercih|isterim|olsun|kullanal\u0131m|yapal\u0131m|istiyorum)(?![A-Za-z0-9_])/iu, cat: "preference", conf: TUNING.CONFIDENCE_LOW }
|
|
488
488
|
];
|
|
489
|
+
function isDiagnosticConstraintText(text) {
|
|
490
|
+
const candidate = text.replace(/^\s*[-*]\s+/, "").trim();
|
|
491
|
+
return /^(?:\[[^\]]+\]\s*)?(?:npm\s+(?:error|warn|notice|audit|verbose|info)\b|(?:rg|grep):|command exited\b)/i.test(candidate);
|
|
492
|
+
}
|
|
489
493
|
|
|
490
494
|
// src/utils/logger.ts
|
|
491
495
|
var DEBUG = process.env.DEBUG?.includes("smart-compact") ?? false;
|
|
@@ -1158,7 +1162,7 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
1158
1162
|
const constraintEvidence = uniqueByText([
|
|
1159
1163
|
...extraction.constraints.filter((item) => item.confidence >= 0.8).map((item) => ({ text: item.text })),
|
|
1160
1164
|
...(continuity?.constraints ?? []).filter((item) => item.confidence >= 0.8).map((item) => ({ text: item.text }))
|
|
1161
|
-
], (item) => item.text);
|
|
1165
|
+
], (item) => item.text).filter((item) => !isDiagnosticConstraintText(item.text));
|
|
1162
1166
|
const decisionEvidence = uniqueByText([
|
|
1163
1167
|
...extraction.decisions.filter((item) => item.type === "explicit").map((item) => ({ summary: item.summary })),
|
|
1164
1168
|
...(continuity?.decisions ?? []).filter((item) => item.type === "explicit").map((item) => ({ summary: item.summary }))
|
|
@@ -1216,11 +1220,20 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
1216
1220
|
score -= 20;
|
|
1217
1221
|
}
|
|
1218
1222
|
}
|
|
1223
|
+
const groundedEvidenceFiles = [
|
|
1224
|
+
...unresolvedEvidence.map((item) => item.message),
|
|
1225
|
+
...constraintEvidence.map((item) => item.text),
|
|
1226
|
+
...decisionEvidence.map((item) => item.summary),
|
|
1227
|
+
...goalEvidence ? [goalEvidence] : [],
|
|
1228
|
+
...continuity?.openLoops.map((item) => item.summary) ?? [],
|
|
1229
|
+
...continuity?.criticalContext ?? []
|
|
1230
|
+
].flatMap(extractFileRefs);
|
|
1219
1231
|
const knownFiles = Array.from(new Set([
|
|
1220
1232
|
...modifiedPaths,
|
|
1221
1233
|
...extraction.readFiles,
|
|
1222
1234
|
...extraction.deletedFiles,
|
|
1223
1235
|
...extraction.referencedFiles ?? [],
|
|
1236
|
+
...groundedEvidenceFiles,
|
|
1224
1237
|
...continuity?.modifiedFiles ?? [],
|
|
1225
1238
|
...continuity?.readFiles ?? [],
|
|
1226
1239
|
...continuity?.deletedFiles ?? [],
|
|
@@ -1245,7 +1258,10 @@ function verifySummary(summary, extraction, continuity = null) {
|
|
|
1245
1258
|
const basename = file.path.split("/").pop() ?? "";
|
|
1246
1259
|
if (!doneSection.toLowerCase().includes(basename.toLowerCase()))
|
|
1247
1260
|
continue;
|
|
1248
|
-
const unresolved = unresolvedEvidence.find((error) =>
|
|
1261
|
+
const unresolved = unresolvedEvidence.find((error) => {
|
|
1262
|
+
const firstLine = error.message.split(/\r?\n/, 1)[0] ?? "";
|
|
1263
|
+
return extractFileRefs(firstLine).some((ref) => isKnownPathReference(ref, [file.path]));
|
|
1264
|
+
});
|
|
1249
1265
|
if (unresolved) {
|
|
1250
1266
|
gaps.push({ kind: "inconsistency", detail: basename + " marked Done but has unresolved error" });
|
|
1251
1267
|
score -= 5;
|
package/dist/telemetry-report.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var __require = import.meta.require;
|
|
3
3
|
|
|
4
4
|
// src/constants.ts
|
|
5
|
-
var VERSION = "8.0.
|
|
5
|
+
var VERSION = "8.0.2";
|
|
6
6
|
var COMPACT_SYSTEM_PREFIX = "You are an expert conversation summarizer for a coding agent. " + "Produce structured markdown summaries. " + "Follow output format exactly. " + "Use EXACT names \u2014 never paraphrase code identifiers. " + "Trust deterministic extraction data over intuition.";
|
|
7
7
|
var PROFILES = {
|
|
8
8
|
light: {
|
|
@@ -606,7 +606,7 @@ var CODE_EXT_RE = /\.(ts|tsx|js|jsx|mjs|cjs|rs|py|go|java|rb|cs|cpp|c|h|hpp|swif
|
|
|
606
606
|
var VERSION_RE = /^v?\d+(?:\.\d+)+(?:[-+][\w.-]+)?$/i;
|
|
607
607
|
var FILE_REF_CANDIDATE_RE = /[\w.\/-]+\.[\w]+/g;
|
|
608
608
|
function isLikelyFileRef(candidate) {
|
|
609
|
-
if (VERSION_RE.test(candidate))
|
|
609
|
+
if (candidate.startsWith("//") || VERSION_RE.test(candidate))
|
|
610
610
|
return false;
|
|
611
611
|
if (candidate.includes("/")) {
|
|
612
612
|
const last = candidate.split("/").pop() ?? "";
|
|
@@ -628,6 +628,10 @@ var CONSTRAINT_PATTERNS = [
|
|
|
628
628
|
{ re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|asla\s+(?:kullanma|yapma|getirme))(?![A-Za-z0-9_])/iu, cat: "prohibition", conf: TUNING.CONFIDENCE_MEDIUM },
|
|
629
629
|
{ re: /(?<![A-Za-z0-9_])(?:tercih|isterim|olsun|kullanal\u0131m|yapal\u0131m|istiyorum)(?![A-Za-z0-9_])/iu, cat: "preference", conf: TUNING.CONFIDENCE_LOW }
|
|
630
630
|
];
|
|
631
|
+
function isDiagnosticConstraintText(text) {
|
|
632
|
+
const candidate = text.replace(/^\s*[-*]\s+/, "").trim();
|
|
633
|
+
return /^(?:\[[^\]]+\]\s*)?(?:npm\s+(?:error|warn|notice|audit|verbose|info)\b|(?:rg|grep):|command exited\b)/i.test(candidate);
|
|
634
|
+
}
|
|
631
635
|
|
|
632
636
|
// src/infra/clock.ts
|
|
633
637
|
var systemClock = {
|
|
@@ -44,6 +44,7 @@ export declare function trackFileOps(msgs: LlmMessage[], _tcIdx?: ToolCallIndex)
|
|
|
44
44
|
};
|
|
45
45
|
export declare function catalogErrors(msgs: LlmMessage[], _tcIdx?: ToolCallIndex): StructuredExtraction["errors"];
|
|
46
46
|
export declare function extractDecisions(msgs: LlmMessage[], _tcIdx?: ToolCallIndex): StructuredExtraction["decisions"];
|
|
47
|
+
export declare function isDiagnosticConstraintText(text: string): boolean;
|
|
47
48
|
export declare function mineConstraints(msgs: LlmMessage[]): StructuredExtraction["constraints"];
|
|
48
49
|
export declare function segmentTopicsHeuristic(msgs: LlmMessage[], pc: ProfileConfig, maxSegs?: number, _tcIdx?: ToolCallIndex): StructuredExtraction["topics"];
|
|
49
50
|
export declare function buildTimeline(msgs: LlmMessage[], errors: StructuredExtraction["errors"]): StructuredExtraction["timeline"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/utils/extraction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9G,iFAAiF;AACjF,eAAO,MAAM,WAAW,QAAW,CAAC;AAEpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAErD;AAMD,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhH,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,EAAE,CAa/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQpD;AAWD,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAoB7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,aAAa,CAyBpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAqC/J;AAcD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAmDxG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAyB9G;AAeD,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAyBvF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,SAAK,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CA+ClJ;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAoB1H;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,GAAG,QAAQ,EAAE,CA0GjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAmB/H"}
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/utils/extraction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9G,iFAAiF;AACjF,eAAO,MAAM,WAAW,QAAW,CAAC;AAEpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAErD;AAMD,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhH,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,EAAE,CAa/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQpD;AAWD,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAoB7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,aAAa,CAyBpE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG;IAAE,QAAQ,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAqC/J;AAcD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAmDxG;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAyB9G;AAeD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAyBvF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,SAAK,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CA+ClJ;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAoB1H;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,oBAAoB,GAAG,QAAQ,EAAE,CA0GjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,aAAa,GAAG,oBAAoB,CAmB/H"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-ref-detect.d.ts","sourceRoot":"","sources":["../../src/utils/file-ref-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,QACoI,CAAC;AAE7J;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAuC,CAAC;AAE/D,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,QAAsB,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"file-ref-detect.d.ts","sourceRoot":"","sources":["../../src/utils/file-ref-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW,QACoI,CAAC;AAE7J;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAuC,CAAC;AAE/D,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,QAAsB,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAGzD"}
|
package/dist/utils/state.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Supports cross-compaction tracking and delta computation.
|
|
5
5
|
*/
|
|
6
6
|
import type { StructuredExtraction, OpenLoop, CompactionState, ExplorationReport, LoopOverride, ContinuityOverride, ContinuityScope } from "../types.ts";
|
|
7
|
+
export declare function sanitizeCompactionStateEvidence(state: CompactionState): CompactionState;
|
|
7
8
|
/**
|
|
8
9
|
* Persist compaction state for cross-compaction tracking.
|
|
9
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAClE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAClD,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
|
package/docs/MIGRATING_TO_V8.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Migrating from v7 to v8
|
|
2
2
|
|
|
3
|
-
This guide applies to the stable `8.0.
|
|
3
|
+
This guide applies to the stable `8.0.2` release.
|
|
4
4
|
|
|
5
5
|
## Compatibility
|
|
6
6
|
|
|
@@ -27,7 +27,10 @@ v7's project-wide state file is left in place but is **not automatically
|
|
|
27
27
|
injected**. Treating it as current could contaminate another session or a
|
|
28
28
|
divergent branch. The first host-confirmed v8 `session_compact` seeds scoped
|
|
29
29
|
state; staging, cancellation, or a failed native apply writes nothing. No conversation log is
|
|
30
|
-
rewritten during migration.
|
|
30
|
+
rewritten during migration. v8.0.1+ filters legacy RC state that misclassified
|
|
31
|
+
`npm error`/`npm notice` diagnostics as constraints, and v8.0.2 also removes legacy
|
|
32
|
+
source-search output persisted as unresolved work; the next confirmed save persists
|
|
33
|
+
the sanitized state.
|
|
31
34
|
|
|
32
35
|
Facts remain conservative: absence from a new window is not deletion. A fact is
|
|
33
36
|
removed only by an explicit resolved/superseded override.
|
|
@@ -81,7 +84,7 @@ See the README configuration table for budgets and monitoring options.
|
|
|
81
84
|
## Recommended rollout
|
|
82
85
|
|
|
83
86
|
1. Back up `~/.pi/agent/settings.json` and the Smart Compact cache directory.
|
|
84
|
-
2. Install the exact stable version: `pi install npm:pi-smart-compact@8.0.
|
|
87
|
+
2. Install the exact stable version: `pi install npm:pi-smart-compact@8.0.2`.
|
|
85
88
|
3. Leave all model routes null initially.
|
|
86
89
|
4. Keep `telemetryChannel: "stable"` unless intentionally running a separate
|
|
87
90
|
canary cohort.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-smart-compact",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.2",
|
|
4
4
|
"description": "Verification-oriented smart compaction extension for Pi Coding Agent — deterministic extraction, exploration, synthesis, verification, metrics, and safety checks.",
|
|
5
5
|
"packageManager": "bun@1.3.14",
|
|
6
6
|
"license": "MIT",
|