acp-kernel 0.0.39 → 0.0.40

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.
@@ -0,0 +1,70 @@
1
+ // src/state.ts
2
+ function createInitialState() {
3
+ return {
4
+ blocks: [],
5
+ messageRefs: { byRaw: {}, byRef: {} },
6
+ tokenSnapshot: {},
7
+ nudge: {
8
+ lastPerMessageNudgeTokens: 0,
9
+ lastNudgeShownTokens: 0,
10
+ baselineTokens: 0,
11
+ anchors: {},
12
+ lastShownByTier: {}
13
+ },
14
+ stats: { tokensCompressed: 0, compressionCount: 0 },
15
+ nextBlockId: 1,
16
+ nextRunId: 1
17
+ };
18
+ }
19
+ function allocateBlockId(state) {
20
+ const id = state.nextBlockId;
21
+ state.nextBlockId = Math.max(1, id) + 1;
22
+ return `b${id}`;
23
+ }
24
+ function allocateRunId(state) {
25
+ const id = state.nextRunId;
26
+ state.nextRunId = Math.max(1, id) + 1;
27
+ return `r${id}`;
28
+ }
29
+ function blockById(state, blockId) {
30
+ return state.blocks.find((block) => block.blockId === blockId);
31
+ }
32
+ function activeBlocks(state) {
33
+ return state.blocks.filter((block) => block.active);
34
+ }
35
+ function coveredMessageIds(state) {
36
+ const covered = /* @__PURE__ */ new Set();
37
+ for (const block of state.blocks) {
38
+ if (!block.active) continue;
39
+ for (const id of block.effectiveMessageIds) covered.add(id);
40
+ }
41
+ return covered;
42
+ }
43
+ function highestActiveTier(state) {
44
+ let highest = 0;
45
+ for (const block of state.blocks) {
46
+ if (block.active && block.tier > highest) highest = block.tier;
47
+ }
48
+ return highest;
49
+ }
50
+ function advanceSurvival(state, promotionThreshold) {
51
+ for (const block of state.blocks) {
52
+ if (!block.active) continue;
53
+ block.survivedCount += 1;
54
+ if (block.survivedCount >= promotionThreshold) {
55
+ block.generation = "old";
56
+ }
57
+ }
58
+ }
59
+
60
+ export {
61
+ createInitialState,
62
+ allocateBlockId,
63
+ allocateRunId,
64
+ blockById,
65
+ activeBlocks,
66
+ coveredMessageIds,
67
+ highestActiveTier,
68
+ advanceSurvival
69
+ };
70
+ //# sourceMappingURL=chunk-DPH62BGM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state.ts"],"sourcesContent":["import type { CompressionBlock, CompressionState } from \"./types.js\";\n\nexport function createInitialState(): CompressionState {\n return {\n blocks: [],\n messageRefs: { byRaw: {}, byRef: {} },\n tokenSnapshot: {},\n nudge: {\n lastPerMessageNudgeTokens: 0,\n lastNudgeShownTokens: 0,\n baselineTokens: 0,\n anchors: {},\n lastShownByTier: {},\n },\n stats: { tokensCompressed: 0, compressionCount: 0 },\n nextBlockId: 1,\n nextRunId: 1,\n };\n}\n\nexport function allocateBlockId(state: CompressionState): string {\n const id = state.nextBlockId;\n state.nextBlockId = Math.max(1, id) + 1;\n return `b${id}`;\n}\n\nexport function allocateRunId(state: CompressionState): string {\n const id = state.nextRunId;\n state.nextRunId = Math.max(1, id) + 1;\n return `r${id}`;\n}\n\nexport function blockById(\n state: CompressionState,\n blockId: string,\n): CompressionBlock | undefined {\n return state.blocks.find((block) => block.blockId === blockId);\n}\n\nexport function activeBlocks(state: CompressionState): CompressionBlock[] {\n return state.blocks.filter((block) => block.active);\n}\n\nexport function coveredMessageIds(state: CompressionState): Set<string> {\n const covered = new Set<string>();\n for (const block of state.blocks) {\n if (!block.active) continue;\n for (const id of block.effectiveMessageIds) covered.add(id);\n }\n return covered;\n}\n\nexport function highestActiveTier(state: CompressionState): 0 | 1 | 2 | 3 {\n let highest: 0 | 1 | 2 | 3 = 0;\n for (const block of state.blocks) {\n if (block.active && block.tier > highest) highest = block.tier;\n }\n return highest;\n}\n\nexport function advanceSurvival(\n state: CompressionState,\n promotionThreshold: number,\n): void {\n for (const block of state.blocks) {\n if (!block.active) continue;\n block.survivedCount += 1;\n if (block.survivedCount >= promotionThreshold) {\n block.generation = \"old\";\n }\n }\n}\n"],"mappings":";AAEO,SAAS,qBAAuC;AACrD,SAAO;AAAA,IACL,QAAQ,CAAC;AAAA,IACT,aAAa,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,IACpC,eAAe,CAAC;AAAA,IAChB,OAAO;AAAA,MACL,2BAA2B;AAAA,MAC3B,sBAAsB;AAAA,MACtB,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,EAAE;AAAA,IAClD,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF;AAEO,SAAS,gBAAgB,OAAiC;AAC/D,QAAM,KAAK,MAAM;AACjB,QAAM,cAAc,KAAK,IAAI,GAAG,EAAE,IAAI;AACtC,SAAO,IAAI,EAAE;AACf;AAEO,SAAS,cAAc,OAAiC;AAC7D,QAAM,KAAK,MAAM;AACjB,QAAM,YAAY,KAAK,IAAI,GAAG,EAAE,IAAI;AACpC,SAAO,IAAI,EAAE;AACf;AAEO,SAAS,UACd,OACA,SAC8B;AAC9B,SAAO,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,YAAY,OAAO;AAC/D;AAEO,SAAS,aAAa,OAA6C;AACxE,SAAO,MAAM,OAAO,OAAO,CAAC,UAAU,MAAM,MAAM;AACpD;AAEO,SAAS,kBAAkB,OAAsC;AACtE,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,CAAC,MAAM,OAAQ;AACnB,eAAW,MAAM,MAAM,oBAAqB,SAAQ,IAAI,EAAE;AAAA,EAC5D;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAAwC;AACxE,MAAI,UAAyB;AAC7B,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,MAAM,UAAU,MAAM,OAAO,QAAS,WAAU,MAAM;AAAA,EAC5D;AACA,SAAO;AACT;AAEO,SAAS,gBACd,OACA,oBACM;AACN,aAAW,SAAS,MAAM,QAAQ;AAChC,QAAI,CAAC,MAAM,OAAQ;AACnB,UAAM,iBAAiB;AACvB,QAAI,MAAM,iBAAiB,oBAAoB;AAC7C,YAAM,aAAa;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkC,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAahF,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;AA2BD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CA6T7D;AAg1BD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../src/compress.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkC,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAahF,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;AA2BD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CA6T7D;AAs2BD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,16 @@ import {
13
13
  resolvePrompts,
14
14
  viableRanges
15
15
  } from "./chunk-MWXUJVMN.js";
16
+ import {
17
+ activeBlocks,
18
+ advanceSurvival,
19
+ allocateBlockId,
20
+ allocateRunId,
21
+ blockById,
22
+ coveredMessageIds,
23
+ createInitialState,
24
+ highestActiveTier
25
+ } from "./chunk-DPH62BGM.js";
16
26
 
17
27
  // src/refs.ts
18
28
  var REF_WIDTH = 5;
@@ -88,65 +98,6 @@ function highestUsedIndex(map) {
88
98
  return highest;
89
99
  }
90
100
 
91
- // src/state.ts
92
- function createInitialState() {
93
- return {
94
- blocks: [],
95
- messageRefs: { byRaw: {}, byRef: {} },
96
- tokenSnapshot: {},
97
- nudge: {
98
- lastPerMessageNudgeTokens: 0,
99
- lastNudgeShownTokens: 0,
100
- baselineTokens: 0,
101
- anchors: {},
102
- lastShownByTier: {}
103
- },
104
- stats: { tokensCompressed: 0, compressionCount: 0 },
105
- nextBlockId: 1,
106
- nextRunId: 1
107
- };
108
- }
109
- function allocateBlockId(state) {
110
- const id = state.nextBlockId;
111
- state.nextBlockId = Math.max(1, id) + 1;
112
- return `b${id}`;
113
- }
114
- function allocateRunId(state) {
115
- const id = state.nextRunId;
116
- state.nextRunId = Math.max(1, id) + 1;
117
- return `r${id}`;
118
- }
119
- function blockById(state, blockId) {
120
- return state.blocks.find((block) => block.blockId === blockId);
121
- }
122
- function activeBlocks(state) {
123
- return state.blocks.filter((block) => block.active);
124
- }
125
- function coveredMessageIds(state) {
126
- const covered = /* @__PURE__ */ new Set();
127
- for (const block of state.blocks) {
128
- if (!block.active) continue;
129
- for (const id of block.effectiveMessageIds) covered.add(id);
130
- }
131
- return covered;
132
- }
133
- function highestActiveTier(state) {
134
- let highest = 0;
135
- for (const block of state.blocks) {
136
- if (block.active && block.tier > highest) highest = block.tier;
137
- }
138
- return highest;
139
- }
140
- function advanceSurvival(state, promotionThreshold) {
141
- for (const block of state.blocks) {
142
- if (!block.active) continue;
143
- block.survivedCount += 1;
144
- if (block.survivedCount >= promotionThreshold) {
145
- block.generation = "old";
146
- }
147
- }
148
- }
149
-
150
101
  // src/prune.ts
151
102
  var SUMMARY_HEADER = "[Compressed conversation section]";
152
103
  var SUMMARY_ID_PREFIX = "acp_summary_";
@@ -1734,6 +1685,15 @@ function applySingleRange(input) {
1734
1685
  )} from compression range (recent/last-user zone).`
1735
1686
  );
1736
1687
  }
1688
+ if (!isBlockBoundary && filteredIds.length === 0 && consumedBlockIds.length > 0) {
1689
+ const first = consumedBlockIds[0];
1690
+ const last = consumedBlockIds[consumedBlockIds.length - 1];
1691
+ throw new Error(
1692
+ `Range ${input.spec.startRef}..${input.spec.endRef} contains no new compressible messages \u2014 every message in it is already covered by active block(s) ${consumedBlockIds.join(
1693
+ ", "
1694
+ )}. Nothing was compressed. To rewrite or merge those blocks, reference them by block ID (${first}..${last}); otherwise run acp_status and compress a range it reports as compressible.`
1695
+ );
1696
+ }
1737
1697
  validateCompressionRange(input, filteredIds, consumedBlockIds.length);
1738
1698
  let compressedTokens = 0;
1739
1699
  for (const id of filteredIds) {