acp-kernel 0.0.26 → 0.0.27
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/dist/compress.d.ts.map +1 -1
- package/dist/index.js +35 -6
- package/dist/index.js.map +1 -1
- package/dist/recommend.d.ts.map +1 -1
- package/dist/render-refs.d.ts +9 -0
- package/dist/render-refs.d.ts.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/tokenize.d.ts.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/compress.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAEhB,MAAM,EAEN,WAAW,EAGX,iBAAiB,EAEjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,KAAK;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IACxD,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IACvE,YAAY,IAAI,YAAY,EAAE,CAAC;IAC/B,UAAU,CACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GACtB,gBAAgB,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IACnE,MAAM,CACJ,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,YAAY,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;IACJ,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC;AAsBD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAwQ7D;
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAapB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAEhB,MAAM,EAEN,WAAW,EAGX,iBAAiB,EAEjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,KAAK;IACpB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;IACxD,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IACvE,YAAY,IAAI,YAAY,EAAE,CAAC;IAC/B,UAAU,CACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GACtB,gBAAgB,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IACnE,MAAM,CACJ,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,YAAY,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EAAE,CAAC;IACJ,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC;AAsBD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAwQ7D;AAkxBD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -77,6 +77,7 @@ function createInitialState() {
|
|
|
77
77
|
return {
|
|
78
78
|
blocks: [],
|
|
79
79
|
messageRefs: { byRaw: {}, byRef: {} },
|
|
80
|
+
tokenSnapshot: {},
|
|
80
81
|
nudge: {
|
|
81
82
|
lastPerMessageNudgeTokens: 0,
|
|
82
83
|
lastNudgeShownTokens: 0,
|
|
@@ -257,11 +258,23 @@ function syncBlocks(messages, state) {
|
|
|
257
258
|
byRaw: { ...state.messageRefs.byRaw },
|
|
258
259
|
byRef: { ...state.messageRefs.byRef }
|
|
259
260
|
},
|
|
261
|
+
// Snapshot is keyed by ref with primitive values — shallow copy suffices.
|
|
262
|
+
tokenSnapshot: { ...state.tokenSnapshot ?? {} },
|
|
260
263
|
nudge: { ...state.nudge, anchors: { ...state.nudge.anchors } },
|
|
261
264
|
stats: { ...state.stats },
|
|
262
265
|
nextBlockId: state.nextBlockId,
|
|
263
266
|
nextRunId: state.nextRunId
|
|
264
267
|
};
|
|
268
|
+
const liveRefs = new Set(
|
|
269
|
+
messages.map((m) => result.messageRefs.byRaw[m.id]).filter((r) => typeof r === "string")
|
|
270
|
+
);
|
|
271
|
+
if (Object.keys(result.tokenSnapshot).length !== liveRefs.size) {
|
|
272
|
+
const pruned = {};
|
|
273
|
+
for (const [ref, n] of Object.entries(result.tokenSnapshot)) {
|
|
274
|
+
if (liveRefs.has(ref)) pruned[ref] = n;
|
|
275
|
+
}
|
|
276
|
+
result.tokenSnapshot = pruned;
|
|
277
|
+
}
|
|
265
278
|
const consumedBlockIds = /* @__PURE__ */ new Set();
|
|
266
279
|
for (const block of result.blocks) {
|
|
267
280
|
for (const consumedId of block.directBlockIds) {
|
|
@@ -298,12 +311,14 @@ function estimateTokensFast(text) {
|
|
|
298
311
|
if (!text) return 0;
|
|
299
312
|
return Math.ceil(text.length / 4);
|
|
300
313
|
}
|
|
314
|
+
var BPE_SIZE_GUARD = 1e5;
|
|
301
315
|
function createBpeTokenizer() {
|
|
302
316
|
try {
|
|
303
317
|
const mod = require2("@anthropic-ai/tokenizer");
|
|
304
318
|
const bpeCount = mod.countTokens ?? mod.default?.countTokens;
|
|
305
319
|
if (typeof bpeCount !== "function") return defaultCountTokens;
|
|
306
320
|
return (text) => {
|
|
321
|
+
if (text.length > BPE_SIZE_GUARD) return defaultCountTokens(text);
|
|
307
322
|
try {
|
|
308
323
|
return bpeCount(text);
|
|
309
324
|
} catch {
|
|
@@ -788,7 +803,7 @@ var TAG_CLOSE = LT + "/acp" + GT;
|
|
|
788
803
|
function acpTag(ref, tokens, type) {
|
|
789
804
|
return TAG_OPEN + 'tokens="' + formatTokens(tokens) + '" type="' + type + '"' + GT + ref + TAG_CLOSE;
|
|
790
805
|
}
|
|
791
|
-
function renderMessage(message, map, countTokens, strategy) {
|
|
806
|
+
function renderMessage(message, map, countTokens, strategy, snapshot = null) {
|
|
792
807
|
const ref = refForRaw(map, message.id);
|
|
793
808
|
if (!ref || ref === BLOCKED_REF) return message;
|
|
794
809
|
if (strategy === "none") return message;
|
|
@@ -799,7 +814,7 @@ function renderMessage(message, map, countTokens, strategy) {
|
|
|
799
814
|
"^" + escapeRegex(TAG_OPEN) + "[^>]*" + GT + escapeRegex(ref) + escapeRegex(TAG_CLOSE) + "\\n?"
|
|
800
815
|
);
|
|
801
816
|
const cleanText = (message.text || "").replace(ownTagRe, "");
|
|
802
|
-
const tokens = countTokens(cleanText);
|
|
817
|
+
const tokens = snapshot ? snapshot[ref] ?? (snapshot[ref] = countTokens(cleanText)) : countTokens(cleanText);
|
|
803
818
|
const type = classifyType(message);
|
|
804
819
|
const prefix = acpTag(ref, tokens, type) + "\n";
|
|
805
820
|
if (!cleanText) return { ...message, text: prefix };
|
|
@@ -811,14 +826,27 @@ function renderVisibleRefs(messages, state, countTokens = (text) => Math.ceil(te
|
|
|
811
826
|
(message) => renderMessage(message, map, countTokens, strategy)
|
|
812
827
|
);
|
|
813
828
|
}
|
|
829
|
+
function renderWithSnapshot(messages, state, countTokens = (text) => Math.ceil(text.length / 4), strategy = "all") {
|
|
830
|
+
const map = state.messageRefs;
|
|
831
|
+
const snapshot = { ...state.tokenSnapshot ?? {} };
|
|
832
|
+
const rendered = messages.map(
|
|
833
|
+
(message) => renderMessage(message, map, countTokens, strategy, snapshot)
|
|
834
|
+
);
|
|
835
|
+
return { messages: rendered, tokenSnapshot: snapshot };
|
|
836
|
+
}
|
|
814
837
|
function createRenderRefsNode(strategy) {
|
|
815
838
|
return {
|
|
816
839
|
name: "render-refs",
|
|
817
840
|
run(io, ctx) {
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
841
|
+
const { messages, tokenSnapshot } = renderWithSnapshot(
|
|
842
|
+
io.messages,
|
|
843
|
+
io.state,
|
|
844
|
+
ctx.countTokens,
|
|
845
|
+
strategy
|
|
846
|
+
);
|
|
847
|
+
const prev = io.state.tokenSnapshot;
|
|
848
|
+
const changed = !prev || Object.keys(tokenSnapshot).length !== Object.keys(prev).length;
|
|
849
|
+
return changed ? { ...io, messages, state: { ...io.state, tokenSnapshot } } : { ...io, messages };
|
|
822
850
|
}
|
|
823
851
|
};
|
|
824
852
|
}
|
|
@@ -1878,6 +1906,7 @@ function cloneState(state) {
|
|
|
1878
1906
|
byRaw: { ...state.messageRefs.byRaw },
|
|
1879
1907
|
byRef: { ...state.messageRefs.byRef }
|
|
1880
1908
|
},
|
|
1909
|
+
tokenSnapshot: { ...state.tokenSnapshot ?? {} },
|
|
1881
1910
|
nudge: { ...state.nudge, anchors: { ...state.nudge.anchors } },
|
|
1882
1911
|
stats: { ...state.stats },
|
|
1883
1912
|
nextBlockId: state.nextBlockId,
|