pi-smart-compact 9.2.1 → 9.3.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/ARCHITECTURE.md +2 -2
- package/CHANGELOG.md +95 -0
- package/dist/app/steps/extract.d.ts.map +1 -1
- package/dist/app/steps/synthesize.d.ts.map +1 -1
- package/dist/app/steps/verify.d.ts.map +1 -1
- package/dist/constants.d.ts +1 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/domain/scrub.d.ts.map +1 -1
- package/dist/domain/summary-parse.d.ts +5 -0
- package/dist/domain/summary-parse.d.ts.map +1 -1
- package/dist/index.js +715 -152
- package/dist/infra/llm-client.d.ts +1 -1
- package/dist/infra/llm-client.d.ts.map +1 -1
- package/dist/phases/synthesize.d.ts +3 -5
- package/dist/phases/synthesize.d.ts.map +1 -1
- package/dist/phases/verify.d.ts +2 -1
- package/dist/phases/verify.d.ts.map +1 -1
- package/dist/provider-eval.js +392 -58
- package/dist/provider-scenario-eval.js +800 -249
- package/dist/telemetry-report.js +364 -30
- package/dist/utils/extraction.d.ts.map +1 -1
- package/dist/utils/file-needles.d.ts.map +1 -1
- package/dist/utils/file-ref-detect.d.ts.map +1 -1
- package/dist/utils/state.d.ts.map +1 -1
- package/package.json +2 -2
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 = "9.
|
|
5
|
+
var VERSION = "9.3.0";
|
|
6
6
|
var SETTLED_TRIGGER_COOLDOWN_MS = 10 * 60000;
|
|
7
7
|
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.";
|
|
8
8
|
var PROFILES = {
|
|
@@ -534,6 +534,188 @@ function lruSet(m, key, value, max) {
|
|
|
534
534
|
}
|
|
535
535
|
|
|
536
536
|
// src/utils/tokens.ts
|
|
537
|
+
var PROVIDER_MAP = {
|
|
538
|
+
"zai-anthropic": {
|
|
539
|
+
maxOutputTokens: 8192,
|
|
540
|
+
supportsTools: "probe",
|
|
541
|
+
jsonReliability: "high",
|
|
542
|
+
instructionFollowing: "high",
|
|
543
|
+
tokenRatioEstimate: 3.5,
|
|
544
|
+
concurrencyLimit: 3,
|
|
545
|
+
cacheStrategy: "anthropic",
|
|
546
|
+
timeoutMultiplier: 1.2,
|
|
547
|
+
singlePassTokenMultiplier: 1,
|
|
548
|
+
multimodal: "metadata-only"
|
|
549
|
+
},
|
|
550
|
+
"kimi-coding": {
|
|
551
|
+
maxOutputTokens: 8192,
|
|
552
|
+
supportsTools: "probe",
|
|
553
|
+
jsonReliability: "high",
|
|
554
|
+
instructionFollowing: "high",
|
|
555
|
+
tokenRatioEstimate: 3.5,
|
|
556
|
+
concurrencyLimit: 2,
|
|
557
|
+
cacheStrategy: "anthropic",
|
|
558
|
+
timeoutMultiplier: 1.5,
|
|
559
|
+
singlePassTokenMultiplier: 0.95,
|
|
560
|
+
multimodal: "metadata-only"
|
|
561
|
+
},
|
|
562
|
+
anthropic: {
|
|
563
|
+
maxOutputTokens: 8192,
|
|
564
|
+
supportsTools: true,
|
|
565
|
+
jsonReliability: "high",
|
|
566
|
+
instructionFollowing: "high",
|
|
567
|
+
tokenRatioEstimate: 3.5,
|
|
568
|
+
concurrencyLimit: 3,
|
|
569
|
+
cacheStrategy: "anthropic",
|
|
570
|
+
timeoutMultiplier: 1.2,
|
|
571
|
+
singlePassTokenMultiplier: 1,
|
|
572
|
+
multimodal: "native"
|
|
573
|
+
},
|
|
574
|
+
openai: {
|
|
575
|
+
maxOutputTokens: 16384,
|
|
576
|
+
supportsTools: true,
|
|
577
|
+
jsonReliability: "high",
|
|
578
|
+
instructionFollowing: "high",
|
|
579
|
+
tokenRatioEstimate: 4,
|
|
580
|
+
concurrencyLimit: 5,
|
|
581
|
+
cacheStrategy: "openai",
|
|
582
|
+
timeoutMultiplier: 1,
|
|
583
|
+
singlePassTokenMultiplier: 1.15,
|
|
584
|
+
multimodal: "native"
|
|
585
|
+
},
|
|
586
|
+
google: {
|
|
587
|
+
maxOutputTokens: 8192,
|
|
588
|
+
supportsTools: true,
|
|
589
|
+
jsonReliability: "high",
|
|
590
|
+
instructionFollowing: "high",
|
|
591
|
+
tokenRatioEstimate: 3.8,
|
|
592
|
+
concurrencyLimit: 3,
|
|
593
|
+
cacheStrategy: "openai",
|
|
594
|
+
timeoutMultiplier: 1.15,
|
|
595
|
+
singlePassTokenMultiplier: 1.1,
|
|
596
|
+
multimodal: "native"
|
|
597
|
+
},
|
|
598
|
+
deepseek: {
|
|
599
|
+
maxOutputTokens: 8192,
|
|
600
|
+
supportsTools: true,
|
|
601
|
+
jsonReliability: "medium",
|
|
602
|
+
instructionFollowing: "medium",
|
|
603
|
+
tokenRatioEstimate: 3.6,
|
|
604
|
+
concurrencyLimit: 2,
|
|
605
|
+
cacheStrategy: "none",
|
|
606
|
+
timeoutMultiplier: 1.5,
|
|
607
|
+
singlePassTokenMultiplier: 0.85,
|
|
608
|
+
multimodal: "metadata-only"
|
|
609
|
+
},
|
|
610
|
+
minimax: {
|
|
611
|
+
maxOutputTokens: 4096,
|
|
612
|
+
supportsTools: "probe",
|
|
613
|
+
jsonReliability: "medium",
|
|
614
|
+
instructionFollowing: "medium",
|
|
615
|
+
tokenRatioEstimate: 3.8,
|
|
616
|
+
concurrencyLimit: 2,
|
|
617
|
+
cacheStrategy: "anthropic",
|
|
618
|
+
timeoutMultiplier: 1.6,
|
|
619
|
+
singlePassTokenMultiplier: 0.8,
|
|
620
|
+
multimodal: "metadata-only"
|
|
621
|
+
},
|
|
622
|
+
"xiaomi-token-plan": {
|
|
623
|
+
maxOutputTokens: 8192,
|
|
624
|
+
supportsTools: "probe",
|
|
625
|
+
jsonReliability: "medium",
|
|
626
|
+
instructionFollowing: "medium",
|
|
627
|
+
tokenRatioEstimate: 3.3,
|
|
628
|
+
concurrencyLimit: 2,
|
|
629
|
+
cacheStrategy: "openai",
|
|
630
|
+
timeoutMultiplier: 1.35,
|
|
631
|
+
singlePassTokenMultiplier: 0.9,
|
|
632
|
+
multimodal: "metadata-only"
|
|
633
|
+
},
|
|
634
|
+
"xiaomi-mimo": {
|
|
635
|
+
maxOutputTokens: 8192,
|
|
636
|
+
supportsTools: "probe",
|
|
637
|
+
jsonReliability: "medium",
|
|
638
|
+
instructionFollowing: "medium",
|
|
639
|
+
tokenRatioEstimate: 3.3,
|
|
640
|
+
concurrencyLimit: 2,
|
|
641
|
+
cacheStrategy: "anthropic",
|
|
642
|
+
timeoutMultiplier: 1.35,
|
|
643
|
+
singlePassTokenMultiplier: 0.9,
|
|
644
|
+
multimodal: "metadata-only"
|
|
645
|
+
},
|
|
646
|
+
crofai: {
|
|
647
|
+
maxOutputTokens: 8192,
|
|
648
|
+
supportsTools: "probe",
|
|
649
|
+
jsonReliability: "medium",
|
|
650
|
+
instructionFollowing: "medium",
|
|
651
|
+
tokenRatioEstimate: 3.8,
|
|
652
|
+
concurrencyLimit: 3,
|
|
653
|
+
cacheStrategy: "none",
|
|
654
|
+
timeoutMultiplier: 1.2,
|
|
655
|
+
singlePassTokenMultiplier: 0.95,
|
|
656
|
+
multimodal: "metadata-only"
|
|
657
|
+
},
|
|
658
|
+
mistral: {
|
|
659
|
+
maxOutputTokens: 8192,
|
|
660
|
+
supportsTools: true,
|
|
661
|
+
jsonReliability: "high",
|
|
662
|
+
instructionFollowing: "high",
|
|
663
|
+
tokenRatioEstimate: 3.5,
|
|
664
|
+
concurrencyLimit: 3,
|
|
665
|
+
cacheStrategy: "openai",
|
|
666
|
+
timeoutMultiplier: 1.2,
|
|
667
|
+
singlePassTokenMultiplier: 1,
|
|
668
|
+
multimodal: "metadata-only"
|
|
669
|
+
},
|
|
670
|
+
xai: {
|
|
671
|
+
maxOutputTokens: 8192,
|
|
672
|
+
supportsTools: true,
|
|
673
|
+
jsonReliability: "medium",
|
|
674
|
+
instructionFollowing: "high",
|
|
675
|
+
tokenRatioEstimate: 3.8,
|
|
676
|
+
concurrencyLimit: 3,
|
|
677
|
+
cacheStrategy: "openai",
|
|
678
|
+
timeoutMultiplier: 1.2,
|
|
679
|
+
singlePassTokenMultiplier: 1,
|
|
680
|
+
multimodal: "native"
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
var PROVIDER_ALIASES = [
|
|
684
|
+
{ pattern: /anthropic/i, provider: "anthropic" },
|
|
685
|
+
{ pattern: /kimi/i, provider: "kimi-coding" },
|
|
686
|
+
{ pattern: /zai/i, provider: "zai-anthropic" },
|
|
687
|
+
{ pattern: /openai/i, provider: "openai" },
|
|
688
|
+
{ pattern: /gpt/i, provider: "openai" },
|
|
689
|
+
{ pattern: /google|gemini/i, provider: "google" },
|
|
690
|
+
{ pattern: /deepseek/i, provider: "deepseek" },
|
|
691
|
+
{ pattern: /minimax/i, provider: "minimax" },
|
|
692
|
+
{ pattern: /xiaomi-mimo/i, provider: "xiaomi-mimo" },
|
|
693
|
+
{ pattern: /xiaomi/i, provider: "xiaomi-token-plan" },
|
|
694
|
+
{ pattern: /crofai/i, provider: "crofai" },
|
|
695
|
+
{ pattern: /mistral/i, provider: "mistral" },
|
|
696
|
+
{ pattern: /xai|grok/i, provider: "xai" }
|
|
697
|
+
];
|
|
698
|
+
var DEFAULT_CAPS = {
|
|
699
|
+
maxOutputTokens: 8192,
|
|
700
|
+
supportsTools: "probe",
|
|
701
|
+
jsonReliability: "medium",
|
|
702
|
+
instructionFollowing: "medium",
|
|
703
|
+
tokenRatioEstimate: 3.8,
|
|
704
|
+
concurrencyLimit: 2,
|
|
705
|
+
cacheStrategy: "none",
|
|
706
|
+
timeoutMultiplier: 1.35,
|
|
707
|
+
singlePassTokenMultiplier: 0.9,
|
|
708
|
+
multimodal: "metadata-only"
|
|
709
|
+
};
|
|
710
|
+
function getProviderCaps(provider) {
|
|
711
|
+
if (PROVIDER_MAP[provider])
|
|
712
|
+
return PROVIDER_MAP[provider];
|
|
713
|
+
for (const { pattern, provider: key } of PROVIDER_ALIASES) {
|
|
714
|
+
if (pattern.test(provider))
|
|
715
|
+
return PROVIDER_MAP[key] ?? DEFAULT_CAPS;
|
|
716
|
+
}
|
|
717
|
+
return DEFAULT_CAPS;
|
|
718
|
+
}
|
|
537
719
|
class TokenCalibrationStore {
|
|
538
720
|
maxEntries;
|
|
539
721
|
factors = new Map;
|
|
@@ -631,10 +813,22 @@ function buildUniquePathNeedles(filePath, allPaths) {
|
|
|
631
813
|
});
|
|
632
814
|
}
|
|
633
815
|
function isKnownPathReference(ref, knownPaths) {
|
|
634
|
-
const normalizedRef = normalizePath(ref);
|
|
816
|
+
const normalizedRef = normalizePath(ref).replace(/^\/+/, "");
|
|
817
|
+
if (!normalizedRef)
|
|
818
|
+
return false;
|
|
819
|
+
const pathShaped = normalizedRef.includes("/");
|
|
635
820
|
return knownPaths.some((path2) => {
|
|
636
|
-
const normalizedPath = normalizePath(path2);
|
|
637
|
-
|
|
821
|
+
const normalizedPath = normalizePath(path2).replace(/^\/+/, "");
|
|
822
|
+
if (normalizedPath === normalizedRef || normalizedPath.endsWith("/" + normalizedRef))
|
|
823
|
+
return true;
|
|
824
|
+
if (normalizedPath.endsWith(normalizedRef)) {
|
|
825
|
+
const boundary = normalizedPath[normalizedPath.length - normalizedRef.length - 1];
|
|
826
|
+
if (boundary && !/[\w./-]/.test(boundary))
|
|
827
|
+
return true;
|
|
828
|
+
}
|
|
829
|
+
if (!pathShaped)
|
|
830
|
+
return false;
|
|
831
|
+
return normalizedPath.split("/").some((_, index, parts) => parts.slice(index).join("/").startsWith(normalizedRef + "/"));
|
|
638
832
|
});
|
|
639
833
|
}
|
|
640
834
|
|
|
@@ -720,10 +914,20 @@ function isLikelyFileRef(candidate) {
|
|
|
720
914
|
return CODE_EXT_RE.test(candidate);
|
|
721
915
|
}
|
|
722
916
|
function extractFileRefs(summary) {
|
|
723
|
-
const
|
|
724
|
-
|
|
917
|
+
const matcher = new RegExp(FILE_REF_CANDIDATE_RE.source, FILE_REF_CANDIDATE_RE.flags);
|
|
918
|
+
const refs = [];
|
|
919
|
+
for (const match of summary.matchAll(matcher)) {
|
|
920
|
+
if (/[\\/]/.test(summary[(match.index ?? 0) + match[0].length] ?? ""))
|
|
921
|
+
continue;
|
|
922
|
+
if (isLikelyFileRef(match[0]))
|
|
923
|
+
refs.push(match[0]);
|
|
924
|
+
}
|
|
925
|
+
return refs;
|
|
725
926
|
}
|
|
726
927
|
|
|
928
|
+
// src/domain/summary-parse.ts
|
|
929
|
+
import { createHash } from "crypto";
|
|
930
|
+
|
|
727
931
|
// src/domain/summary-schema.ts
|
|
728
932
|
function classifyHeading(raw) {
|
|
729
933
|
const text = raw.replace(/^#+\s*/, "").replace(/[:\s]+$/, "").trim().toLowerCase();
|
|
@@ -763,6 +967,58 @@ var HEADING_RE = /^(#{1,3})\s+(.+?)\s*$/;
|
|
|
763
967
|
function summaryEvidenceLine(value, maxLength) {
|
|
764
968
|
return value.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g, " ").replace(/\s+/g, " ").trim().replace(/^(?:(?:#{1,6}|[-*+]|>)\s+)+/, "").slice(0, maxLength).trim();
|
|
765
969
|
}
|
|
970
|
+
function summaryPathLine(value) {
|
|
971
|
+
return JSON.stringify(value);
|
|
972
|
+
}
|
|
973
|
+
function compactPathLine(value, maxLength, digest) {
|
|
974
|
+
const minimal = JSON.stringify("#" + digest);
|
|
975
|
+
if (minimal.length >= maxLength)
|
|
976
|
+
return minimal;
|
|
977
|
+
const chars = Array.from(value.replace(/\\/g, "/"));
|
|
978
|
+
let low = 0;
|
|
979
|
+
let high = chars.length;
|
|
980
|
+
let best = minimal;
|
|
981
|
+
while (low <= high) {
|
|
982
|
+
const length = Math.floor((low + high) / 2);
|
|
983
|
+
const candidate = JSON.stringify("\u2026/" + chars.slice(-length).join("") + "#" + digest);
|
|
984
|
+
if (candidate.length <= maxLength) {
|
|
985
|
+
best = candidate;
|
|
986
|
+
low = length + 1;
|
|
987
|
+
} else {
|
|
988
|
+
high = length - 1;
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
return best;
|
|
992
|
+
}
|
|
993
|
+
function buildSummaryPathEvidence(paths, budgetTokens = PROFILES.balanced.summaryBudgetTokens) {
|
|
994
|
+
const unique = Array.from(new Set(paths.filter(Boolean)));
|
|
995
|
+
if (!unique.length)
|
|
996
|
+
return new Map;
|
|
997
|
+
const full = unique.map((path2) => [path2, summaryPathLine(path2)]);
|
|
998
|
+
const minimumPerLine = JSON.stringify("#" + "x".repeat(12)).length + 3;
|
|
999
|
+
const budgetChars = Math.max(unique.length * minimumPerLine, Math.min(20000, Math.max(4000, Math.floor(budgetTokens * 2))));
|
|
1000
|
+
if (full.reduce((total, [, line]) => total + line.length + 3, 0) <= budgetChars) {
|
|
1001
|
+
return new Map(full);
|
|
1002
|
+
}
|
|
1003
|
+
const digests = new Map;
|
|
1004
|
+
const owners = new Map;
|
|
1005
|
+
for (const path2 of unique) {
|
|
1006
|
+
const fullDigest = createHash("sha256").update(path2).digest("base64url");
|
|
1007
|
+
let digest = fullDigest.slice(0, 12);
|
|
1008
|
+
const owner = owners.get(digest);
|
|
1009
|
+
if (owner && owner !== path2) {
|
|
1010
|
+
digest = fullDigest;
|
|
1011
|
+
digests.set(owner, createHash("sha256").update(owner).digest("base64url"));
|
|
1012
|
+
}
|
|
1013
|
+
owners.set(digest, path2);
|
|
1014
|
+
digests.set(path2, digest);
|
|
1015
|
+
}
|
|
1016
|
+
const perPath = Math.max(JSON.stringify("#" + "x".repeat(12)).length, Math.floor((budgetChars - unique.length * 3) / unique.length));
|
|
1017
|
+
return new Map(unique.map((path2) => [
|
|
1018
|
+
path2,
|
|
1019
|
+
compactPathLine(path2, perPath, digests.get(path2) ?? "")
|
|
1020
|
+
]));
|
|
1021
|
+
}
|
|
766
1022
|
function mergeBodies(first, second) {
|
|
767
1023
|
const seen = new Set;
|
|
768
1024
|
return [first, second].filter(Boolean).flatMap((body) => body.split(`
|
|
@@ -787,7 +1043,11 @@ function parseSummary(markdown) {
|
|
|
787
1043
|
if (existing)
|
|
788
1044
|
existing.body = mergeBodies(existing.body, body);
|
|
789
1045
|
else
|
|
790
|
-
sections.push({
|
|
1046
|
+
sections.push({
|
|
1047
|
+
kind: currentKind,
|
|
1048
|
+
heading: currentHeading.trim(),
|
|
1049
|
+
body
|
|
1050
|
+
});
|
|
791
1051
|
};
|
|
792
1052
|
for (const line of lines) {
|
|
793
1053
|
const fenceMatch = line.match(/^\s{0,3}(`{3,}|~{3,})(.*)$/);
|
|
@@ -878,7 +1138,11 @@ function buildToolCallIndex(msgs) {
|
|
|
878
1138
|
for (let t = 0;t < nested.length; t++) {
|
|
879
1139
|
const tool = nested[t];
|
|
880
1140
|
const id = nestedToolCallId(b.id, i, t, tool.id);
|
|
881
|
-
idx.set(id, {
|
|
1141
|
+
idx.set(id, {
|
|
1142
|
+
name: tool.name,
|
|
1143
|
+
arguments: tool.arguments,
|
|
1144
|
+
msgIndex: i
|
|
1145
|
+
});
|
|
882
1146
|
}
|
|
883
1147
|
}
|
|
884
1148
|
}
|
|
@@ -886,12 +1150,36 @@ function buildToolCallIndex(msgs) {
|
|
|
886
1150
|
return idx;
|
|
887
1151
|
}
|
|
888
1152
|
var CONSTRAINT_PATTERNS = [
|
|
889
|
-
{
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
{
|
|
1153
|
+
{
|
|
1154
|
+
re: /\b(?:must|need|require|has to|important)\b.*\b(?:be|use|have|include|support)\b/i,
|
|
1155
|
+
cat: "requirement",
|
|
1156
|
+
conf: TUNING.CONFIDENCE_HIGH
|
|
1157
|
+
},
|
|
1158
|
+
{
|
|
1159
|
+
re: /\b(?:don't|never|avoid|shouldn't|must not|do not|no\s+(?:need|want))\b/i,
|
|
1160
|
+
cat: "prohibition",
|
|
1161
|
+
conf: TUNING.CONFIDENCE_MEDIUM
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
re: /\b(?:prefer|like|want|would rather|should)\b.*\b(?:use|be|have|with)\b/i,
|
|
1165
|
+
cat: "preference",
|
|
1166
|
+
conf: TUNING.CONFIDENCE_LOW
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
re: /(?<![A-Za-z0-9_])(?:yapma|kullanma|sak\u0131n|sak\u0131nha|asla(?:\s+(?:kullanma|yapma|getirme))?|bunu yapma)(?![A-Za-z0-9_])/iu,
|
|
1170
|
+
cat: "prohibition",
|
|
1171
|
+
conf: TUNING.CONFIDENCE_MEDIUM
|
|
1172
|
+
},
|
|
1173
|
+
{
|
|
1174
|
+
re: /(?<![A-Za-z0-9_])(?:kritik|kritikal|\u00F6nemli|onemli|\u015Fart|sart|zorunlu|\u015Fart ko\u015Ful|\u00F6nemli \u015Fart|kesinlikle|kesinlikle \u015Fart|b\u00F6yle olsun|b\u00F6yle yap\u0131n|\u015F\u00F6yle olsun|\u015F\u00F6yle yap\u0131n)(?![A-Za-z0-9_])/iu,
|
|
1175
|
+
cat: "requirement",
|
|
1176
|
+
conf: TUNING.CONFIDENCE_MEDIUM
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
re: /(?<![A-Za-z0-9_])(?:tercih|isterim|olsun|kullanal\u0131m|yapal\u0131m|istiyorum)(?![A-Za-z0-9_])/iu,
|
|
1180
|
+
cat: "preference",
|
|
1181
|
+
conf: TUNING.CONFIDENCE_LOW
|
|
1182
|
+
}
|
|
895
1183
|
];
|
|
896
1184
|
function isDiagnosticConstraintText(text) {
|
|
897
1185
|
const candidate = text.replace(/^\s*[-*]\s+/, "").trim();
|
|
@@ -960,7 +1248,10 @@ function withCodexWireLimit(model, opts) {
|
|
|
960
1248
|
onPayload: async (payload, requestModel) => {
|
|
961
1249
|
const transformed = await previous?.(payload, requestModel);
|
|
962
1250
|
const body = transformed ?? payload;
|
|
963
|
-
return body && typeof body === "object" ? {
|
|
1251
|
+
return body && typeof body === "object" ? {
|
|
1252
|
+
...body,
|
|
1253
|
+
max_output_tokens: opts.maxTokens
|
|
1254
|
+
} : body;
|
|
964
1255
|
}
|
|
965
1256
|
};
|
|
966
1257
|
}
|
|
@@ -981,11 +1272,12 @@ function assertSuccessful(message) {
|
|
|
981
1272
|
}
|
|
982
1273
|
return message;
|
|
983
1274
|
}
|
|
984
|
-
async function withProviderDeadline(opts, invoke) {
|
|
1275
|
+
async function withProviderDeadline(opts, invoke, modelId) {
|
|
985
1276
|
if (opts.signal?.aborted)
|
|
986
1277
|
throw new Error("LLM request aborted before dispatch");
|
|
987
1278
|
const controller = new AbortController;
|
|
988
|
-
const
|
|
1279
|
+
const multiplier = modelId && !((opts.codexWatchdogMs ?? 0) > 0) ? getProviderCaps(modelId).timeoutMultiplier : 1;
|
|
1280
|
+
const watchdogMs = Math.round(resolveCodexWatchdogMs(opts.maxTokens, opts.codexWatchdogMs) * multiplier);
|
|
989
1281
|
const abort = Promise.withResolvers();
|
|
990
1282
|
const abortFromCaller = () => {
|
|
991
1283
|
controller.abort(opts.signal?.reason);
|
|
@@ -1058,7 +1350,7 @@ var rawLlmClient = {
|
|
|
1058
1350
|
return completeChatGptCodex(model, body, bounded);
|
|
1059
1351
|
const response = bounded.reasoning === undefined ? await (await resolveComplete())(model, body, bounded) : await (await resolveCompleteSimple())(model, body, bounded);
|
|
1060
1352
|
return assertSuccessful(response);
|
|
1061
|
-
});
|
|
1353
|
+
}, model.id);
|
|
1062
1354
|
}
|
|
1063
1355
|
};
|
|
1064
1356
|
var defaultLlmClient = rawLlmClient;
|
|
@@ -1072,7 +1364,10 @@ import crypto from "crypto";
|
|
|
1072
1364
|
|
|
1073
1365
|
// src/domain/scrub.ts
|
|
1074
1366
|
var SECRET_PATTERNS = [
|
|
1075
|
-
{
|
|
1367
|
+
{
|
|
1368
|
+
kind: "private-key",
|
|
1369
|
+
regex: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g
|
|
1370
|
+
},
|
|
1076
1371
|
{ kind: "aws-access-key", regex: /\bAKIA[0-9A-Z]{16}\b/g },
|
|
1077
1372
|
{ kind: "google-api-key", regex: /\bAIza[0-9A-Za-z_-]{30,}\b/g },
|
|
1078
1373
|
{ kind: "stripe-key", regex: /\b[rs]k_(?:live|test)_[0-9A-Za-z]{16,}\b/g },
|
|
@@ -1081,8 +1376,15 @@ var SECRET_PATTERNS = [
|
|
|
1081
1376
|
{ kind: "github-token", regex: /\bgh[pousr]_[A-Za-z0-9]{20,}\b/g },
|
|
1082
1377
|
{ kind: "api-key", regex: /\bsk-(?:ant-)?[A-Za-z0-9_-]{20,}\b/g },
|
|
1083
1378
|
{ kind: "slack-token", regex: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g },
|
|
1084
|
-
{
|
|
1085
|
-
|
|
1379
|
+
{
|
|
1380
|
+
kind: "jwt",
|
|
1381
|
+
regex: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g
|
|
1382
|
+
},
|
|
1383
|
+
{
|
|
1384
|
+
kind: "bearer-token",
|
|
1385
|
+
regex: /\bBearer\s+[A-Za-z0-9._~+/-]{12,}=*/gi,
|
|
1386
|
+
replacement: () => "Bearer [REDACTED:bearer-token]"
|
|
1387
|
+
},
|
|
1086
1388
|
{
|
|
1087
1389
|
kind: "connection-password",
|
|
1088
1390
|
regex: /\b([a-z][a-z0-9+.-]*:\/\/[^:\s/@]+:)[^@\s/]+(@)/gi,
|
|
@@ -1091,12 +1393,35 @@ var SECRET_PATTERNS = [
|
|
|
1091
1393
|
{
|
|
1092
1394
|
kind: "credential",
|
|
1093
1395
|
regex: /\b((?:[A-Za-z0-9]+[_-])*(?:api[_-]?key|access[_-]?token|auth[_-]?token|token|password|passwd|secret(?:[_-]?(?:access)?[_-]?key)?|client[_-]?secret)(?:[_-][A-Za-z0-9]+)*)\s*([:=])\s*["']?([^\s"']{16,})["']?/gi,
|
|
1094
|
-
replacement: (name, separator) => name + separator + "[REDACTED:credential]"
|
|
1396
|
+
replacement: (name, separator, value, match) => /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+$/.test(value) ? match : name + separator + "[REDACTED:credential]"
|
|
1095
1397
|
}
|
|
1096
1398
|
];
|
|
1399
|
+
function passesLuhn(candidate) {
|
|
1400
|
+
const digits = candidate.replace(/\D/g, "");
|
|
1401
|
+
if (digits.length < 13 || digits.length > 19)
|
|
1402
|
+
return false;
|
|
1403
|
+
if (/^(\d)\1+$/.test(digits))
|
|
1404
|
+
return false;
|
|
1405
|
+
let sum = 0, double = false;
|
|
1406
|
+
for (let i = digits.length - 1;i >= 0; i--) {
|
|
1407
|
+
let d = digits.charCodeAt(i) - 48;
|
|
1408
|
+
if (double) {
|
|
1409
|
+
d *= 2;
|
|
1410
|
+
if (d > 9)
|
|
1411
|
+
d -= 9;
|
|
1412
|
+
}
|
|
1413
|
+
sum += d;
|
|
1414
|
+
double = !double;
|
|
1415
|
+
}
|
|
1416
|
+
return sum % 10 === 0;
|
|
1417
|
+
}
|
|
1097
1418
|
var PII_PATTERNS = [
|
|
1098
1419
|
{ kind: "email", regex: /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi },
|
|
1099
|
-
{
|
|
1420
|
+
{
|
|
1421
|
+
kind: "payment-card",
|
|
1422
|
+
regex: /\b(?:\d[ -]*?){13,19}\b/g,
|
|
1423
|
+
replacement: (candidate) => passesLuhn(candidate) ? "[REDACTED:payment-card]" : candidate
|
|
1424
|
+
},
|
|
1100
1425
|
{ kind: "phone", regex: /(?<![\w.])(?:\+?\d[\d ()-]{8,}\d)(?![\w.])/g }
|
|
1101
1426
|
];
|
|
1102
1427
|
function redact(text, patterns) {
|
|
@@ -1104,15 +1429,22 @@ function redact(text, patterns) {
|
|
|
1104
1429
|
let value = text;
|
|
1105
1430
|
for (const pattern of patterns) {
|
|
1106
1431
|
value = value.replace(pattern.regex, (...args) => {
|
|
1107
|
-
|
|
1432
|
+
const match = String(args[0]);
|
|
1433
|
+
let replacement = "[REDACTED:" + pattern.kind + "]";
|
|
1108
1434
|
if (pattern.replacement) {
|
|
1109
1435
|
const groups = args.slice(1, -2).map(String);
|
|
1110
|
-
|
|
1436
|
+
replacement = pattern.replacement(...groups, match);
|
|
1111
1437
|
}
|
|
1112
|
-
|
|
1438
|
+
if (replacement === match)
|
|
1439
|
+
return match;
|
|
1440
|
+
counts.set(pattern.kind, (counts.get(pattern.kind) ?? 0) + 1);
|
|
1441
|
+
return replacement;
|
|
1113
1442
|
});
|
|
1114
1443
|
}
|
|
1115
|
-
return {
|
|
1444
|
+
return {
|
|
1445
|
+
value,
|
|
1446
|
+
findings: [...counts].map(([kind, count]) => ({ kind, count }))
|
|
1447
|
+
};
|
|
1116
1448
|
}
|
|
1117
1449
|
function mergeFindings(target, findings) {
|
|
1118
1450
|
for (const finding of findings)
|
|
@@ -1142,7 +1474,6 @@ var SECRET_KEY_NAMES = {
|
|
|
1142
1474
|
set_cookie: true,
|
|
1143
1475
|
otp: true,
|
|
1144
1476
|
one_time_password: true,
|
|
1145
|
-
pin: true,
|
|
1146
1477
|
passcode: true
|
|
1147
1478
|
};
|
|
1148
1479
|
function normalizeObjectKey(key) {
|
|
@@ -1208,7 +1539,7 @@ class SecretScrubber {
|
|
|
1208
1539
|
const output = {};
|
|
1209
1540
|
seen.set(value2, output);
|
|
1210
1541
|
for (const [key, item] of Object.entries(value2)) {
|
|
1211
|
-
const carriesSecret = typeof item === "string"
|
|
1542
|
+
const carriesSecret = typeof item === "string" && item.length >= 8;
|
|
1212
1543
|
if (this.secretsEnabled && isSecretBearingKey(key) && carriesSecret) {
|
|
1213
1544
|
output[key] = "[REDACTED:credential]";
|
|
1214
1545
|
recordCredential();
|
|
@@ -1219,7 +1550,10 @@ class SecretScrubber {
|
|
|
1219
1550
|
return output;
|
|
1220
1551
|
};
|
|
1221
1552
|
const value = visit(input);
|
|
1222
|
-
return {
|
|
1553
|
+
return {
|
|
1554
|
+
value,
|
|
1555
|
+
findings: [...findings].map(([kind, count]) => ({ kind, count }))
|
|
1556
|
+
};
|
|
1223
1557
|
}
|
|
1224
1558
|
count() {
|
|
1225
1559
|
return this.total;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/utils/extraction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/utils/extraction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-needles.d.ts","sourceRoot":"","sources":["../../src/utils/file-needles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"file-needles.d.ts","sourceRoot":"","sources":["../../src/utils/file-needles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAahD,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB3D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,EAAE,CAUV;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CA+BT"}
|
|
@@ -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,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
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,CAWzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-smart-compact",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.3.0",
|
|
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
|
"engines": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"telemetry-report": "bun run dist/telemetry-report.js",
|
|
59
59
|
"compat:pi": "bun run scripts/check-pi-compat.ts",
|
|
60
60
|
"release:audit": "bun run scripts/release-audit.ts",
|
|
61
|
-
"release:check": "bun run typecheck && bun test && bun run gate && bun run bench && bun run build && bun run release:audit",
|
|
61
|
+
"release:check": "bun run typecheck && bun test && bun run gate && bun run bench && bun run build && bun run release:audit && bun run compat:pi latest",
|
|
62
62
|
"typecheck": "bun x tsc --noEmit && bun x tsc -p tsconfig.scripts.json",
|
|
63
63
|
"prepublishOnly": "bun run release:check"
|
|
64
64
|
},
|