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 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
@@ -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.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.0", CHARS_PER_TOKEN = 3.8, COMPACT_SYSTEM_PREFIX, PROFILES, DEFAULT_CONFIG, NO_OP_RE, SHIFT_RE, CHOICE_RE, SINGLE_PASS_PREFIX, SINGLE_PASS_SUFFIX = `
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 || /^(?:\[[^\]]+\]\s*)?(?:npm\s+(?:error|warn|notice)|(?:rg|grep):|command exited\b)/i.test(candidate))
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
- ...state,
3885
- decisions: state.decisions.filter((item) => !inactive.has("decision:" + normalizeFactKey(item.summary))),
3886
- constraints: state.constraints.filter((item) => !inactive.has("constraint:" + normalizeFactKey(item.text))),
3887
- unresolvedErrors: state.unresolvedErrors.filter((item) => !inactive.has("error:" + normalizeFactKey(item.message))),
3888
- openLoops: state.openLoops.filter((item) => !inactive.has("loop:" + normalizeFactKey(item.summary))),
3889
- criticalContext: mergeBy(replacements, state.criticalContext, normalizeFactKey, 20),
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) => error.message.toLowerCase().includes(basename.toLowerCase()));
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;AAU9G,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,CAyIpB;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"}
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"}
@@ -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.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.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) => error.message.toLowerCase().includes(basename.toLowerCase()));
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;
@@ -2,7 +2,7 @@
2
2
  var __require = import.meta.require;
3
3
 
4
4
  // src/constants.ts
5
- var VERSION = "8.0.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,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAGzD"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  # Migrating from v7 to v8
2
2
 
3
- This guide applies to the stable `8.0.0` release.
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.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.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",