pi-smart-compact 7.12.1 → 7.12.4
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 +24 -0
- package/README.md +5 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -17
- package/dist/phases/synthesize.d.ts.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/helpers.d.ts +1 -1
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/tokens.d.ts.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [7.12.4] - 2026-05-20
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **Manual command override** — Explicit user-run `/smart-compact` commands now bypass the adaptive `minContextPercent` tier gate, while auto-trigger and agent tool calls still respect it. This keeps cache-protective behavior for agents but preserves user control.
|
|
7
|
+
|
|
8
|
+
## [7.12.3] - 2026-05-20
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **Safer pi-toolkit threshold** — Raised the default `minContextPercent` from 30 to 60 so high `tool=XX%` ratios from pi-auto-context do not trigger smart compaction while actual context usage is still moderate.
|
|
12
|
+
- **Agent guidance** — Updated the `smart_compact` tool description and guidelines to explicitly ignore pi-auto-context `tool=XX%` as a compaction signal and use actual `context=XX%` instead.
|
|
13
|
+
- **Package image metadata** — Switched the package gallery image URL to the stable `main` asset path to avoid version-tag drift.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- **Provider capability mapping** — Added explicit pi-toolkit provider entries for `kimi-coding`, `xiaomi-mimo`, and `crofai` so timeout/concurrency/cache metadata does not fall through to generic defaults.
|
|
17
|
+
- **Open-loop indexing** — Replaced `msgs.indexOf(msg)` with indexed loops in open-loop extraction to avoid O(n²) scans and incorrect source indexes for repeated message references.
|
|
18
|
+
- **Batch summary fallback** — Hardened `summarizeBatch()` so a missing or merged LLM section falls back to the original chunk preview instead of producing an empty segment summary.
|
|
19
|
+
- **Pending summary observability** — Log when an expired pending smart summary is discarded.
|
|
20
|
+
|
|
21
|
+
## [7.12.2] - 2026-05-20
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- **Context threshold guard completion** — Completed the `minContextPercent` guard across config, types, tier selection, core pipeline, tool handler, and tests.
|
|
25
|
+
- **Precise threshold comparison** — `smart_compact` now compares raw context percentage for the guard and uses rounded percentage only for user-facing text.
|
|
26
|
+
|
|
3
27
|
## [7.12.1] - 2026-05-19
|
|
4
28
|
|
|
5
29
|
### Fixed
|
package/README.md
CHANGED
|
@@ -179,7 +179,9 @@ The tool prepares a pending smart summary and lets Pi consume it on the next nat
|
|
|
179
179
|
|
|
180
180
|
## Usage notes
|
|
181
181
|
|
|
182
|
-
- compaction is skipped when the context is still small enough
|
|
182
|
+
- auto/tool compaction is skipped when the context is still small enough (default: below 60% actual context usage)
|
|
183
|
+
- explicit manual `/smart-compact` commands bypass the 60% adaptive gate because the user intentionally requested compaction
|
|
184
|
+
- pi-toolkit `tool=XX%` status means tool-output ratio, **not** context fullness; smart-compact uses actual `context=XX%`
|
|
183
185
|
- the tool path does **not** compact the conversation mid-turn
|
|
184
186
|
- pending summaries are kept in memory for **5 minutes**
|
|
185
187
|
- exploration is adaptive and may be skipped for simple sessions
|
|
@@ -202,6 +204,7 @@ Add this to `~/.pi/agent/settings.json`:
|
|
|
202
204
|
"segmentationModel": "anthropic/claude-haiku-3",
|
|
203
205
|
"autoTrigger": true,
|
|
204
206
|
"autoTriggerTimeoutMs": 120000,
|
|
207
|
+
"minContextPercent": 60,
|
|
205
208
|
"backupEnabled": true,
|
|
206
209
|
"profiles": {
|
|
207
210
|
"balanced": {
|
|
@@ -222,6 +225,7 @@ Add this to `~/.pi/agent/settings.json`:
|
|
|
222
225
|
| `segmentationModel` | `string \| null` | `null` |
|
|
223
226
|
| `autoTrigger` | `boolean` | `true` |
|
|
224
227
|
| `autoTriggerTimeoutMs` | `number` | `120000` |
|
|
228
|
+
| `minContextPercent` | `number` | `60` |
|
|
225
229
|
| `backupEnabled` | `boolean` | `true` |
|
|
226
230
|
| `backupDir` | `string` | `~/.pi/agent/compact-backups` |
|
|
227
231
|
| `profiles` | partial per-profile overrides | built-ins |
|
package/dist/constants.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Constants, prompts, and profile defaults.
|
|
3
3
|
*/
|
|
4
4
|
import type { CompressionProfile, ProfileConfig } from "./types.ts";
|
|
5
|
-
export declare const VERSION = "7.12.
|
|
5
|
+
export declare const VERSION = "7.12.4";
|
|
6
6
|
export declare const CHARS_PER_TOKEN = 3.8;
|
|
7
7
|
export declare const COMPACT_SYSTEM_PREFIX: string;
|
|
8
8
|
export declare const PROFILES: Record<CompressionProfile, ProfileConfig>;
|
|
@@ -15,6 +15,7 @@ export declare const DEFAULT_CONFIG: {
|
|
|
15
15
|
autoTriggerTimeoutMs: number;
|
|
16
16
|
backupEnabled: boolean;
|
|
17
17
|
backupDir: string;
|
|
18
|
+
minContextPercent: number;
|
|
18
19
|
};
|
|
19
20
|
export declare const NO_OP_RE: RegExp;
|
|
20
21
|
export declare const SHIFT_RE: RegExp;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,qBAAqB,QAKqB,CAAC;AAExD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAyB9D,CAAC;AAEF,eAAO,MAAM,cAAc;aACF,kBAAkB;;kBAEnB,MAAM,GAAG,IAAI;uBACR,MAAM,GAAG,IAAI
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpE,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,eAAO,MAAM,qBAAqB,QAKqB,CAAC;AAExD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAyB9D,CAAC;AAEF,eAAO,MAAM,cAAc;aACF,kBAAkB;;kBAEnB,MAAM,GAAG,IAAI;uBACR,MAAM,GAAG,IAAI;;;;;;CAMzC,CAAC;AAEF,eAAO,MAAM,QAAQ,QAA+E,CAAC;AACrG,eAAO,MAAM,QAAQ,QAAuH,CAAC;AAC7I,eAAO,MAAM,SAAS,QAAmG,CAAC;AAI1H,eAAO,MAAM,kBAAkB,QAgB+C,CAAC;AAE/E,eAAO,MAAM,kBAAkB,yHACyF,CAAC;AAEzH,eAAO,MAAM,mBAAmB,QAWoB,CAAC;AAErD,eAAO,MAAM,mBAAmB,8DAA8D,CAAC;AAE/F,eAAO,MAAM,sBAAsB,QAoB2B,CAAC;AAE/D,eAAO,MAAM,sBAAsB,8OAC0M,CAAC;AAI9O,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK5D,CAAC;AAGF,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAClE,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AACpD,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAC1D,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAClD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,eAAe,qCAAqC,CAAC;AAGlE,eAAO,MAAM,UAAU,oBAAoB,CAAC;AAG5C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAGxC,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,eAAO,MAAM,sBAAsB,QAU6T,CAAC"}
|
package/dist/core.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export interface SmartCompactOptions {
|
|
|
22
22
|
autoTriggered?: boolean;
|
|
23
23
|
userNote?: string;
|
|
24
24
|
skipCompact?: boolean;
|
|
25
|
+
/** Explicit user command may bypass adaptive context-pressure tier gate. */
|
|
26
|
+
force?: boolean;
|
|
25
27
|
/** Optional hard budget for native auto-trigger only. Manual/tool runs do not time out by default. */
|
|
26
28
|
timeoutMs?: number;
|
|
27
29
|
}
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAAE,iBAAiB,EAEtC,MAAM,YAAY,CAAC;AAuBpB,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE;QAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+e9E"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAAE,iBAAiB,EAEtC,MAAM,YAAY,CAAC;AAuBpB,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,uBAAuB,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE;QAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,SAAS,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+e9E"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;AA0C7F,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,iCAAiC,CAAC;AA0C7F,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAE,EAAE,YAAY,QA0L7D"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
// src/constants.ts
|
|
3
|
-
var VERSION = "7.12.
|
|
3
|
+
var VERSION = "7.12.4";
|
|
4
4
|
var CHARS_PER_TOKEN = 3.8;
|
|
5
5
|
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.";
|
|
6
6
|
var PROFILES = {
|
|
@@ -37,7 +37,8 @@ var DEFAULT_CONFIG = {
|
|
|
37
37
|
autoTrigger: true,
|
|
38
38
|
autoTriggerTimeoutMs: 120000,
|
|
39
39
|
backupEnabled: true,
|
|
40
|
-
backupDir: ""
|
|
40
|
+
backupDir: "",
|
|
41
|
+
minContextPercent: 60
|
|
41
42
|
};
|
|
42
43
|
var NO_OP_RE = /applied:\s*0|no changes applied|nothing to (?:do|change)|0 edits? applied/i;
|
|
43
44
|
var SHIFT_RE = /simdi|peki|bide|bi de|gecelim|bakalim|yapalim|baska|sonra|tamam simdi|now let|also|next|let's|moving on|switch to/i;
|
|
@@ -263,6 +264,13 @@ function validateSmartCompactConfig(sc) {
|
|
|
263
264
|
delete sc.autoTriggerTimeoutMs;
|
|
264
265
|
}
|
|
265
266
|
}
|
|
267
|
+
if ("minContextPercent" in sc) {
|
|
268
|
+
const v = sc.minContextPercent;
|
|
269
|
+
if (typeof v !== "number" || !Number.isFinite(v) || v < 0 || v > 100) {
|
|
270
|
+
warn("smart-compact config: minContextPercent must be 0\u2013100, got " + v + ". Using default " + DEFAULT_CONFIG.minContextPercent + ".");
|
|
271
|
+
delete sc.minContextPercent;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
266
274
|
}
|
|
267
275
|
var _cfg = null;
|
|
268
276
|
var _cfgMtime = 0;
|
|
@@ -538,9 +546,11 @@ function computeToolCharPercentage(branchEntries) {
|
|
|
538
546
|
}
|
|
539
547
|
return totalChars > 0 ? Math.round(toolChars / totalChars * 100) : 0;
|
|
540
548
|
}
|
|
541
|
-
function selectCompactionTier(contextPercent, toolPercent, totalTokens, minThreshold) {
|
|
549
|
+
function selectCompactionTier(contextPercent, toolPercent, totalTokens, minThreshold, minContextPercent = 60) {
|
|
542
550
|
if (totalTokens < minThreshold)
|
|
543
551
|
return "none";
|
|
552
|
+
if (contextPercent < minContextPercent)
|
|
553
|
+
return "none";
|
|
544
554
|
if (contextPercent < 45 && toolPercent < 60)
|
|
545
555
|
return "none";
|
|
546
556
|
if (contextPercent < 80)
|
|
@@ -595,6 +605,18 @@ var PROVIDER_MAP = {
|
|
|
595
605
|
singlePassTokenMultiplier: 1,
|
|
596
606
|
multimodal: "metadata-only"
|
|
597
607
|
},
|
|
608
|
+
"kimi-coding": {
|
|
609
|
+
maxOutputTokens: 8192,
|
|
610
|
+
supportsTools: "probe",
|
|
611
|
+
jsonReliability: "high",
|
|
612
|
+
instructionFollowing: "high",
|
|
613
|
+
tokenRatioEstimate: 3.5,
|
|
614
|
+
concurrencyLimit: 2,
|
|
615
|
+
cacheStrategy: "anthropic",
|
|
616
|
+
timeoutMultiplier: 1.5,
|
|
617
|
+
singlePassTokenMultiplier: 0.95,
|
|
618
|
+
multimodal: "metadata-only"
|
|
619
|
+
},
|
|
598
620
|
anthropic: {
|
|
599
621
|
maxOutputTokens: 8192,
|
|
600
622
|
supportsTools: true,
|
|
@@ -667,6 +689,30 @@ var PROVIDER_MAP = {
|
|
|
667
689
|
singlePassTokenMultiplier: 0.9,
|
|
668
690
|
multimodal: "metadata-only"
|
|
669
691
|
},
|
|
692
|
+
"xiaomi-mimo": {
|
|
693
|
+
maxOutputTokens: 8192,
|
|
694
|
+
supportsTools: "probe",
|
|
695
|
+
jsonReliability: "medium",
|
|
696
|
+
instructionFollowing: "medium",
|
|
697
|
+
tokenRatioEstimate: 3.3,
|
|
698
|
+
concurrencyLimit: 2,
|
|
699
|
+
cacheStrategy: "anthropic",
|
|
700
|
+
timeoutMultiplier: 1.35,
|
|
701
|
+
singlePassTokenMultiplier: 0.9,
|
|
702
|
+
multimodal: "metadata-only"
|
|
703
|
+
},
|
|
704
|
+
crofai: {
|
|
705
|
+
maxOutputTokens: 8192,
|
|
706
|
+
supportsTools: "probe",
|
|
707
|
+
jsonReliability: "medium",
|
|
708
|
+
instructionFollowing: "medium",
|
|
709
|
+
tokenRatioEstimate: 3.8,
|
|
710
|
+
concurrencyLimit: 3,
|
|
711
|
+
cacheStrategy: "none",
|
|
712
|
+
timeoutMultiplier: 1.2,
|
|
713
|
+
singlePassTokenMultiplier: 0.95,
|
|
714
|
+
multimodal: "metadata-only"
|
|
715
|
+
},
|
|
670
716
|
mistral: {
|
|
671
717
|
maxOutputTokens: 8192,
|
|
672
718
|
supportsTools: true,
|
|
@@ -694,13 +740,16 @@ var PROVIDER_MAP = {
|
|
|
694
740
|
};
|
|
695
741
|
var PROVIDER_ALIASES = [
|
|
696
742
|
{ pattern: /anthropic/i, provider: "anthropic" },
|
|
743
|
+
{ pattern: /kimi/i, provider: "kimi-coding" },
|
|
697
744
|
{ pattern: /zai/i, provider: "zai-anthropic" },
|
|
698
745
|
{ pattern: /openai/i, provider: "openai" },
|
|
699
746
|
{ pattern: /gpt/i, provider: "openai" },
|
|
700
747
|
{ pattern: /google|gemini/i, provider: "google" },
|
|
701
748
|
{ pattern: /deepseek/i, provider: "deepseek" },
|
|
702
749
|
{ pattern: /minimax/i, provider: "minimax" },
|
|
750
|
+
{ pattern: /xiaomi-mimo/i, provider: "xiaomi-mimo" },
|
|
703
751
|
{ pattern: /xiaomi/i, provider: "xiaomi-token-plan" },
|
|
752
|
+
{ pattern: /crofai/i, provider: "crofai" },
|
|
704
753
|
{ pattern: /mistral/i, provider: "mistral" },
|
|
705
754
|
{ pattern: /xai|grok/i, provider: "xai" }
|
|
706
755
|
];
|
|
@@ -1559,14 +1608,14 @@ function extractOpenLoops(msgs, extraction) {
|
|
|
1559
1608
|
});
|
|
1560
1609
|
}
|
|
1561
1610
|
const FOLLOWUP_RE = /(?:next\s+(?:step|thing)|todo|action item|follow\s*up|still (?:need|have) to|gotta|gotta|yapalim|yapmamiz|gerekiyor|eklenecek|d\u00FCzeltilecek|bitmedi|kaldi)/i;
|
|
1562
|
-
for (
|
|
1611
|
+
for (let idx = 0;idx < msgs.length; idx++) {
|
|
1612
|
+
const msg = msgs[idx];
|
|
1563
1613
|
if (msg.role !== "user")
|
|
1564
1614
|
continue;
|
|
1565
1615
|
const txt = extractText(msg.content);
|
|
1566
1616
|
if (txt.length < 10 || txt.startsWith("/"))
|
|
1567
1617
|
continue;
|
|
1568
1618
|
if (FOLLOWUP_RE.test(txt)) {
|
|
1569
|
-
const idx = msgs.indexOf(msg);
|
|
1570
1619
|
const isDup = loops.some((l) => Math.abs((l.sourceIndex ?? 0) - idx) < 5);
|
|
1571
1620
|
if (!isDup) {
|
|
1572
1621
|
loops.push({
|
|
@@ -1582,12 +1631,12 @@ function extractOpenLoops(msgs, extraction) {
|
|
|
1582
1631
|
}
|
|
1583
1632
|
}
|
|
1584
1633
|
const BLOCKED_RE = /blocked|waiting for|depend|ba[\u011Fg]li|bekliyor|engell/i;
|
|
1585
|
-
for (
|
|
1634
|
+
for (let idx = 0;idx < msgs.length; idx++) {
|
|
1635
|
+
const msg = msgs[idx];
|
|
1586
1636
|
if (msg.role !== "user")
|
|
1587
1637
|
continue;
|
|
1588
1638
|
const txt = extractText(msg.content);
|
|
1589
1639
|
if (BLOCKED_RE.test(txt)) {
|
|
1590
|
-
const idx = msgs.indexOf(msg);
|
|
1591
1640
|
const isDup = loops.some((l) => Math.abs((l.sourceIndex ?? 0) - idx) < 5);
|
|
1592
1641
|
if (!isDup) {
|
|
1593
1642
|
loops.push({
|
|
@@ -2920,13 +2969,16 @@ async function summarizeBatch(batch, extraction, model, auth, signal) {
|
|
|
2920
2969
|
return !v || v === "None" ? [] : v.split(",").map((s) => s.trim()).filter(Boolean);
|
|
2921
2970
|
};
|
|
2922
2971
|
const prio = f("Priority").toLowerCase();
|
|
2972
|
+
const sectionFallback = sec.split(`
|
|
2973
|
+
`).slice(1).join(`
|
|
2974
|
+
`).trim().slice(0, 500);
|
|
2975
|
+
const chunkFallback = ch.messages.map((m) => "[" + (m?.role ?? "unknown") + "] " + extractText(m?.content).slice(0, 180)).join(`
|
|
2976
|
+
`).slice(0, 500);
|
|
2923
2977
|
return {
|
|
2924
2978
|
topic: ch.topic,
|
|
2925
2979
|
startIndex: ch.startIndex,
|
|
2926
2980
|
endIndex: ch.endIndex,
|
|
2927
|
-
summary: f("Summary") ||
|
|
2928
|
-
`).slice(1).join(`
|
|
2929
|
-
`).trim().slice(0, 500),
|
|
2981
|
+
summary: f("Summary") || sectionFallback || chunkFallback || "No summary generated for this segment.",
|
|
2930
2982
|
keyDecisions: l("Decisions"),
|
|
2931
2983
|
filesModified: l("Modified"),
|
|
2932
2984
|
filesRead: l("Read"),
|
|
@@ -3410,7 +3462,7 @@ async function showCompactUI(ctx, opts) {
|
|
|
3410
3462
|
|
|
3411
3463
|
// src/core.ts
|
|
3412
3464
|
async function runSmartCompact(opts) {
|
|
3413
|
-
const { ctx, summaryModel, segModel, profile, verbose = false, dryRun = false, pendingRef, isRunning, autoTriggered = false, userNote, skipCompact, timeoutMs = 0 } = opts;
|
|
3465
|
+
const { ctx, summaryModel, segModel, profile, verbose = false, dryRun = false, pendingRef, isRunning, autoTriggered = false, userNote, skipCompact, force = false, timeoutMs = 0 } = opts;
|
|
3414
3466
|
if (isRunning.value)
|
|
3415
3467
|
return;
|
|
3416
3468
|
isRunning.value = true;
|
|
@@ -3513,7 +3565,7 @@ async function runSmartCompact(opts) {
|
|
|
3513
3565
|
markPhase("recover");
|
|
3514
3566
|
contextPercent = ctx.model && totalTokens ? totalTokens / ctx.model.contextWindow * 100 : 0;
|
|
3515
3567
|
toolPercent = computeToolCharPercentage(branch);
|
|
3516
|
-
tier = selectCompactionTier(contextPercent, toolPercent, totalTokens, MIN_TOKEN_THRESHOLD);
|
|
3568
|
+
tier = force ? contextPercent >= 80 ? "full" : "light" : selectCompactionTier(contextPercent, toolPercent, totalTokens, MIN_TOKEN_THRESHOLD, config.minContextPercent);
|
|
3517
3569
|
if (tier === "none") {
|
|
3518
3570
|
isRunning.value = false;
|
|
3519
3571
|
if (!autoTriggered)
|
|
@@ -3983,7 +4035,7 @@ Dashboard: ` + fp : ""), "info");
|
|
|
3983
4035
|
ctx.ui.notify("Could not resolve model", "error");
|
|
3984
4036
|
return;
|
|
3985
4037
|
}
|
|
3986
|
-
await runSmartCompact({ ctx, summaryModel: sumModel2, segModel: segModel2 ?? sumModel2, profile: selected.profile, pendingRef, isRunning });
|
|
4038
|
+
await runSmartCompact({ ctx, summaryModel: sumModel2, segModel: segModel2 ?? sumModel2, profile: selected.profile, pendingRef, isRunning, force: true });
|
|
3987
4039
|
return;
|
|
3988
4040
|
}
|
|
3989
4041
|
const { segModel, sumModel } = resolveModels(ctx, modelArg ? resolveModelArg(ctx, modelArg) : ctx.model, loadConfig());
|
|
@@ -3992,7 +4044,7 @@ Dashboard: ` + fp : ""), "info");
|
|
|
3992
4044
|
return;
|
|
3993
4045
|
}
|
|
3994
4046
|
const note = extractUserNote(args);
|
|
3995
|
-
await runSmartCompact({ ctx, summaryModel: sumModel, segModel: segModel ?? sumModel, profile, verbose, dryRun, pendingRef, isRunning, userNote: note });
|
|
4047
|
+
await runSmartCompact({ ctx, summaryModel: sumModel, segModel: segModel ?? sumModel, profile, verbose, dryRun, pendingRef, isRunning, userNote: note, force: true });
|
|
3996
4048
|
} catch (error) {
|
|
3997
4049
|
const msg = error instanceof Error ? error.message + `
|
|
3998
4050
|
` + error.stack : String(error);
|
|
@@ -4004,6 +4056,7 @@ Dashboard: ` + fp : ""), "info");
|
|
|
4004
4056
|
if (pendingRef.value) {
|
|
4005
4057
|
const age = Date.now() - pendingRef.createdAt;
|
|
4006
4058
|
if (age > PENDING_TTL_MS) {
|
|
4059
|
+
warn("Discarding expired pending smart compaction after " + Math.round(age / 1000) + "s");
|
|
4007
4060
|
pendingRef.value = null;
|
|
4008
4061
|
pendingRef.createdAt = 0;
|
|
4009
4062
|
} else {
|
|
@@ -4021,6 +4074,9 @@ Dashboard: ` + fp : ""), "info");
|
|
|
4021
4074
|
const totalTokens = usage?.tokens ?? 0;
|
|
4022
4075
|
if (!totalTokens || totalTokens < MIN_TOKEN_THRESHOLD)
|
|
4023
4076
|
return;
|
|
4077
|
+
const pct = ctx.model && totalTokens ? totalTokens / ctx.model.contextWindow * 100 : 0;
|
|
4078
|
+
if (pct < config.minContextPercent)
|
|
4079
|
+
return;
|
|
4024
4080
|
const cur = ctx.model;
|
|
4025
4081
|
if (!cur)
|
|
4026
4082
|
return;
|
|
@@ -4063,9 +4119,13 @@ Dashboard: ` + fp : ""), "info");
|
|
|
4063
4119
|
pi.registerTool({
|
|
4064
4120
|
name: "smart_compact",
|
|
4065
4121
|
label: "Smart Compact",
|
|
4066
|
-
description: "EESV smart compaction v" + VERSION + " with deterministic extraction, exploration, and verification. Compacts the conversation into a structured summary preserving goals, decisions, open loops, modified files, and critical context. Call
|
|
4122
|
+
description: "EESV smart compaction v" + VERSION + " with deterministic extraction, exploration, and verification. Compacts the conversation into a structured summary preserving goals, decisions, open loops, modified files, and critical context. Call only when actual context usage is high; ignore pi-auto-context tool=XX% because that is tool-output ratio, not context fullness. The tool internally checks context usage and skips if not needed.",
|
|
4067
4123
|
promptSnippet: "Smart compaction",
|
|
4068
|
-
promptGuidelines: [
|
|
4124
|
+
promptGuidelines: [
|
|
4125
|
+
"Use only when actual context usage is high (for example pi-auto-context context>=60%).",
|
|
4126
|
+
"Do NOT call just because pi-auto-context shows tool=XX%; tool% is tool-output ratio, not context fullness.",
|
|
4127
|
+
"Prefer this over default compact only when compaction is actually needed."
|
|
4128
|
+
],
|
|
4069
4129
|
parameters: {
|
|
4070
4130
|
type: "object",
|
|
4071
4131
|
properties: {
|
|
@@ -4092,10 +4152,14 @@ Dashboard: ` + fp : "") }], details: undefined };
|
|
|
4092
4152
|
const cmdCtx = ctx;
|
|
4093
4153
|
const usage = ctx.getContextUsage?.();
|
|
4094
4154
|
const totalTokens = usage?.tokens ?? 0;
|
|
4155
|
+
const rawPct = ctx.model && totalTokens ? totalTokens / ctx.model.contextWindow * 100 : 0;
|
|
4156
|
+
const pct = Math.round(rawPct);
|
|
4095
4157
|
if (!totalTokens || totalTokens < MIN_TOKEN_THRESHOLD) {
|
|
4096
|
-
const pct = ctx.model && totalTokens ? Math.round(totalTokens / ctx.model.contextWindow * 100) : 0;
|
|
4097
4158
|
return { content: [{ type: "text", text: "Context is not large enough for compaction (" + totalTokens.toLocaleString() + " tokens, " + pct + "%). No action needed." }], details: undefined };
|
|
4098
4159
|
}
|
|
4160
|
+
if (rawPct < config.minContextPercent) {
|
|
4161
|
+
return { content: [{ type: "text", text: "Context is only " + pct + "% full (" + totalTokens.toLocaleString() + " tokens). Compaction is not needed yet. The tool=97% in status means tool output ratio, NOT context usage." }], details: undefined };
|
|
4162
|
+
}
|
|
4099
4163
|
const cur = "model" in ctx ? ctx.model : undefined;
|
|
4100
4164
|
const { segModel, sumModel } = resolveModels(cmdCtx, cur, config);
|
|
4101
4165
|
if (!sumModel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EACxD,iBAAiB,EAAE,aAAa,EACjC,MAAM,aAAa,CAAC;AAYrB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,aAAa,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,GAAG,QAAQ,EAAE,CAoDrI;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACpF,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GACxH,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,CAAC,CAuB3C;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,oBAAoB,EACnD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAClG,OAAO,CAAC,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EACxD,iBAAiB,EAAE,aAAa,EACjC,MAAM,aAAa,CAAC;AAYrB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,aAAa,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,aAAa,GAAG,QAAQ,EAAE,CAoDrI;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACpF,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GACxH,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,CAAC,CAuB3C;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,oBAAoB,EACnD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAClG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyCzB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAC7F,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,EAC7F,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GACxC,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,oBAAoB,GAAG,MAAM,CAcpG"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAExD,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export declare function buildExtractionContext(extraction: StructuredExtraction,
|
|
|
54
54
|
*/
|
|
55
55
|
export declare function computeToolCharPercentage(branchEntries: unknown[]): number;
|
|
56
56
|
export type CompactionTier = "none" | "light" | "full";
|
|
57
|
-
export declare function selectCompactionTier(contextPercent: number, toolPercent: number, totalTokens: number, minThreshold: number): CompactionTier;
|
|
57
|
+
export declare function selectCompactionTier(contextPercent: number, toolPercent: number, totalTokens: number, minThreshold: number, minContextPercent?: number): CompactionTier;
|
|
58
58
|
export declare function inferSessionType(extraction: StructuredExtraction, report: ExplorationReport | null): SessionType;
|
|
59
59
|
export declare function buildExplorationContext(report: ExplorationReport): string;
|
|
60
60
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAsB,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOxK;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAsB,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOxK;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAmE5E;AAKD,wBAAgB,UAAU,IAAI,aAAa,CAkB1C;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUrF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAQtE;AAqCD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,mBAAmB,EAAE,EAC3B,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,OAAO,EAAE,GACxB,MAAM,CAwCR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmC3F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKhE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,CASjF;AAqCD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM;;;;;EAYnF;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAY1H;AAED;;;;;;;;;;;;;GAaG;AACH;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAmB1E;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,iBAAiB,GAAE,MAAW,GAC7B,cAAc,CAOhB;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAC/B,WAAW,CAeb;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAYzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiGxD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAQtE;AAUD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAMhG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-smart-compact",
|
|
3
|
-
"version": "7.12.
|
|
3
|
+
"version": "7.12.4",
|
|
4
4
|
"description": "EESV smart compaction extension for Pi Coding Agent — deterministic extraction, exploration, synthesis, verification with redundancy pruning, project fingerprinting, and damage detection.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"pi": {
|
|
49
49
|
"extensions": ["./dist/index.js"],
|
|
50
|
-
"image": "https://raw.githubusercontent.com/alpertarhan/pi-smart-compact/
|
|
50
|
+
"image": "https://raw.githubusercontent.com/alpertarhan/pi-smart-compact/main/docs/assets/pi-smart-compact.png"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"@earendil-works/pi-ai": "*",
|