acp-kernel 0.0.15 → 0.0.17
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/README.md +31 -0
- package/dist/compress.d.ts +14 -0
- package/dist/compress.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -17
- package/dist/index.js.map +1 -1
- package/dist/protected.d.ts +13 -10
- package/dist/protected.d.ts.map +1 -1
- package/dist/render-refs.d.ts +16 -1
- package/dist/render-refs.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,6 +54,37 @@ core.search("auth token", compressed); // relevance-ranked block search
|
|
|
54
54
|
core.status(compressed, tokenCount, config); // context-usage report
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
#### `renderTags` — host-side rendering strategy
|
|
58
|
+
|
|
59
|
+
`processTurn` always assigns a ref (e.g. `m00005`) to **every** mapped message,
|
|
60
|
+
including tool calls — that ref map is the anchor the model cites inside
|
|
61
|
+
`compress` calls. What varies is whether the `<acp>` tag is also **injected into
|
|
62
|
+
message text**. Pick the strategy that matches how your host consumes the
|
|
63
|
+
output:
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { processTurn, type RenderStrategy } from "acp-kernel";
|
|
67
|
+
|
|
68
|
+
type RenderStrategy = "all" | "text-only" | "none";
|
|
69
|
+
|
|
70
|
+
// default: every mapped message gets a visible <acp> tag.
|
|
71
|
+
// Use for in-process hosts (pai-acp / billion-context-pi) where the LLM
|
|
72
|
+
// reads the tag to identify compress ranges.
|
|
73
|
+
processTurn({ messages, state, config, tokenCount });
|
|
74
|
+
|
|
75
|
+
// proxy mode: tag user/assistant text, but leave tool-call args and tool
|
|
76
|
+
// results pristine (a <acp> tag inside {"command":"echo"} corrupts the JSON).
|
|
77
|
+
// Refs are still assigned to every message; only text rendering is selective.
|
|
78
|
+
processTurn({ messages, state, config, tokenCount, renderTags: "text-only" });
|
|
79
|
+
|
|
80
|
+
// host reads the ref map directly and never wants tags in the text.
|
|
81
|
+
// processTurn honors this by omitting the render-refs node entirely.
|
|
82
|
+
processTurn({ messages, state, config, tokenCount, renderTags: "none" });
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
`renderTags` is optional and defaults to `"all"`, so existing call sites keep
|
|
86
|
+
working unchanged.
|
|
87
|
+
|
|
57
88
|
### Standalone modules
|
|
58
89
|
|
|
59
90
|
| Module | Purpose |
|
package/dist/compress.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createInitialState } from "./state.js";
|
|
2
|
+
import type { RenderStrategy } from "./render-refs.js";
|
|
2
3
|
import { type PipelineNode } from "./pipeline.js";
|
|
3
4
|
import type { ApplyCompressionResult, CompressionBlock, CompressionState, Config, CoreMessage, ProcessTurnResult, StatusReport } from "./types.js";
|
|
4
5
|
export interface Ports {
|
|
@@ -17,6 +18,19 @@ export interface ProcessTurnInput {
|
|
|
17
18
|
state: CompressionState;
|
|
18
19
|
config: Config;
|
|
19
20
|
tokenCount: number;
|
|
21
|
+
/**
|
|
22
|
+
* Which messages get an <acp> ref tag injected into their text
|
|
23
|
+
* (the render-refs pipeline node). Refs are ALWAYS assigned regardless
|
|
24
|
+
* (assign-refs node runs unconditionally).
|
|
25
|
+
* - "all" (default): tag every mapped message — in-process hosts
|
|
26
|
+
* like pai-acp want tags for the LLM to reference compress ranges.
|
|
27
|
+
* - "text-only": tag only user/assistant text; leave tool-call args
|
|
28
|
+
* and tool-result content pristine — proxy hosts where structured
|
|
29
|
+
* content must not be polluted.
|
|
30
|
+
* - "none": leave all text untouched — hosts that read the ref map
|
|
31
|
+
* directly from result.state.messageRefs.
|
|
32
|
+
*/
|
|
33
|
+
renderTags?: RenderStrategy;
|
|
20
34
|
}
|
|
21
35
|
export interface ApplyCompressionInput {
|
|
22
36
|
ranges: {
|
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;
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAQpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD,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;AAED,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAqO7D;AAmrBD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,8 @@ export { hideConsumedCompressCalls } from "./hide-consumed.js";
|
|
|
22
22
|
export type { HideConsumedResult } from "./hide-consumed.js";
|
|
23
23
|
export { rebuildCompressionState } from "./rebuild.js";
|
|
24
24
|
export type { RebuildResult, RebuildPorts } from "./rebuild.js";
|
|
25
|
-
export { renderVisibleRefs, renderRefsNode } from "./render-refs.js";
|
|
25
|
+
export { renderVisibleRefs, renderRefsNode, createRenderRefsNode } from "./render-refs.js";
|
|
26
|
+
export type { RenderStrategy } from "./render-refs.js";
|
|
26
27
|
export { searchBlocks, searchBlocksAsync, blockDocs, messageDocs } from "./search.js";
|
|
27
28
|
export type { SearchResult, SearchOptions, SearchAlgorithm, AsyncSearchAlgorithm, AnySearchAlgorithm, SearchDoc, SearchDocKind, ScoredBlock, MessageRole, RoleWeights, MessageInput } from "./search.js";
|
|
28
29
|
export { DEFAULT_ALGORITHM, DEFAULT_ROLE_WEIGHTS, registerSearchAlgorithm, getSearchAlgorithm, listSearchAlgorithms } from "./search.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACV,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EACH,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,2BAA2B,EAC3B,mBAAmB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -675,9 +675,13 @@ var TAG_CLOSE = LT + "/acp" + GT;
|
|
|
675
675
|
function acpTag(ref, tokens, type) {
|
|
676
676
|
return TAG_OPEN + 'tokens="' + formatTokens(tokens) + '" type="' + type + '"' + GT + ref + TAG_CLOSE;
|
|
677
677
|
}
|
|
678
|
-
function renderMessage(message, map, countTokens) {
|
|
678
|
+
function renderMessage(message, map, countTokens, strategy) {
|
|
679
679
|
const ref = refForRaw(map, message.id);
|
|
680
680
|
if (!ref || ref === BLOCKED_REF) return message;
|
|
681
|
+
if (strategy === "none") return message;
|
|
682
|
+
if (strategy === "text-only" && message.contentType !== "text") {
|
|
683
|
+
return message;
|
|
684
|
+
}
|
|
681
685
|
const ownTagRe = new RegExp(
|
|
682
686
|
"^" + escapeRegex(TAG_OPEN) + "[^>]*" + GT + escapeRegex(ref) + escapeRegex(TAG_CLOSE) + "\\n?"
|
|
683
687
|
);
|
|
@@ -688,25 +692,33 @@ function renderMessage(message, map, countTokens) {
|
|
|
688
692
|
if (!cleanText) return { ...message, text: prefix };
|
|
689
693
|
return { ...message, text: prefix + cleanText };
|
|
690
694
|
}
|
|
691
|
-
function renderVisibleRefs(messages, state, countTokens = (text) => Math.ceil(text.length / 4)) {
|
|
695
|
+
function renderVisibleRefs(messages, state, countTokens = (text) => Math.ceil(text.length / 4), strategy = "all") {
|
|
692
696
|
const map = state.messageRefs;
|
|
693
697
|
return messages.map(
|
|
694
|
-
(message) => renderMessage(message, map, countTokens)
|
|
698
|
+
(message) => renderMessage(message, map, countTokens, strategy)
|
|
695
699
|
);
|
|
696
700
|
}
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
}
|
|
701
|
+
function createRenderRefsNode(strategy) {
|
|
702
|
+
return {
|
|
703
|
+
name: "render-refs",
|
|
704
|
+
run(io, ctx) {
|
|
705
|
+
return {
|
|
706
|
+
...io,
|
|
707
|
+
messages: renderVisibleRefs(io.messages, io.state, ctx.countTokens, strategy)
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
var renderRefsNode = createRenderRefsNode("all");
|
|
706
713
|
|
|
707
714
|
// src/protected.ts
|
|
708
715
|
var ALWAYS_PROTECTED_TOOLS = ["compress"];
|
|
709
|
-
var NEVER_PRESERVE_RECENT_TOOLS = [
|
|
716
|
+
var NEVER_PRESERVE_RECENT_TOOLS = [
|
|
717
|
+
"decompress",
|
|
718
|
+
"search_context",
|
|
719
|
+
"read",
|
|
720
|
+
"bash"
|
|
721
|
+
];
|
|
710
722
|
function isNeverPreserveRecent(msg) {
|
|
711
723
|
if (msg.contentType !== "tool-call" && msg.contentType !== "tool-result") {
|
|
712
724
|
return false;
|
|
@@ -1081,7 +1093,9 @@ function createCore(ports = {}) {
|
|
|
1081
1093
|
state: input.state,
|
|
1082
1094
|
effects: {}
|
|
1083
1095
|
};
|
|
1084
|
-
const
|
|
1096
|
+
const strategy = input.renderTags ?? "all";
|
|
1097
|
+
const nodes = buildNodes(strategy);
|
|
1098
|
+
const result = runPipeline(nodes, initial, ctx);
|
|
1085
1099
|
return {
|
|
1086
1100
|
messages: result.messages,
|
|
1087
1101
|
state: result.state,
|
|
@@ -1111,7 +1125,10 @@ function createCore(ports = {}) {
|
|
|
1111
1125
|
};
|
|
1112
1126
|
}
|
|
1113
1127
|
function defaultNodes() {
|
|
1114
|
-
return
|
|
1128
|
+
return buildNodes("all");
|
|
1129
|
+
}
|
|
1130
|
+
function buildNodes(strategy) {
|
|
1131
|
+
const base = [
|
|
1115
1132
|
assignRefsNode,
|
|
1116
1133
|
syncBlocksNode,
|
|
1117
1134
|
pruneNode,
|
|
@@ -1119,9 +1136,10 @@ function createCore(ports = {}) {
|
|
|
1119
1136
|
hideCompressCallsNode,
|
|
1120
1137
|
recommendNode,
|
|
1121
1138
|
nudgeNode,
|
|
1122
|
-
emergencyTruncateNode
|
|
1123
|
-
renderRefsNode
|
|
1139
|
+
emergencyTruncateNode
|
|
1124
1140
|
];
|
|
1141
|
+
if (strategy === "none") return base;
|
|
1142
|
+
return [...base, createRenderRefsNode(strategy)];
|
|
1125
1143
|
}
|
|
1126
1144
|
return { processTurn, applyCompression, defaultNodes, decompress, search, status };
|
|
1127
1145
|
}
|
|
@@ -2644,6 +2662,7 @@ export {
|
|
|
2644
2662
|
createBpeTokenizer,
|
|
2645
2663
|
createCore,
|
|
2646
2664
|
createInitialState,
|
|
2665
|
+
createRenderRefsNode,
|
|
2647
2666
|
deactivateBlock,
|
|
2648
2667
|
defaultConfig,
|
|
2649
2668
|
defaultCountTokens,
|