acp-kernel 0.0.69-pr.283.149 → 0.0.69-pr.284.148

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.
@@ -14,6 +14,7 @@ function createInitialState() {
14
14
  stats: { tokensCompressed: 0, compressionCount: 0, absorbedTokens: 0 },
15
15
  absorbed: [],
16
16
  rules: [],
17
+ nextRuleId: 1,
17
18
  nextBlockId: 1,
18
19
  nextRunId: 1
19
20
  };
@@ -69,4 +70,4 @@ export {
69
70
  highestActiveTier,
70
71
  advanceSurvival
71
72
  };
72
- //# sourceMappingURL=chunk-HVB3QSSH.js.map
73
+ //# sourceMappingURL=chunk-5TQA7ZQM.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, absorbedTokens: 0 },\n absorbed: [],\n rules: [],\n nextRuleId: 1,\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,GAAG,gBAAgB,EAAE;AAAA,IACrE,UAAU,CAAC;AAAA,IACX,OAAO,CAAC;AAAA,IACR,YAAY;AAAA,IACZ,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;AAgBhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUvD,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;AA2DD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAyU7D;AAygCD,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;AAgBhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUvD,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;AA2DD,wBAAgB,UAAU,CAAC,KAAK,GAAE,KAAU,GAAG,eAAe,CAyU7D;AA2gCD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,CA+CR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAsEvD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,OAAO,CAAC,MAAM,CAAM,GAC9B,MAAM,CA+CR;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAuDvD"}
package/dist/index.d.ts CHANGED
@@ -33,8 +33,8 @@ export type { HideConsumedResult } from "./hide-consumed.js";
33
33
  export { ABSORB_TOOL_NAME, ABSORB_TOOL, ABSORB_TOOL_OPENAI, } from "./compress-tools.js";
34
34
  export { ABSORB_PROMPT_MARKER, DEFAULT_ABSORB_CONFIG, resolveAbsorbConfig, buildAbsorbPrompt, buildAbsorbSystemPrompt, isAbsorbCandidate, hideAbsorbedMessages, appendAbsorbPrompts, parseAbsorbInput, applyAbsorb, } from "./absorb.js";
35
35
  export type { AbsorbInput, AbsorbOutcome, ParsedAbsorb, AppendAbsorbPromptsResult, } from "./absorb.js";
36
- export { RULE_TOOL_NAME, RULE_TOOL_DESCRIPTION, RULE_TOOL, RULE_TOOL_OPENAI, RULE_TOOL_RESPONSES, DEFAULT_RULE_LIMITS, rulesEnabled, resolveRuleLimits, listRules, allocateRuleId, addRule, removeRule, clearRules, formatRulesList, } from "./rules.js";
37
- export type { RuleLimits, AddRuleResult } from "./rules.js";
36
+ export { RULE_TOOL_NAME, DEFAULT_RULE_LIMITS, RULES_USAGE_PROMPT, listRules, allocateRuleId, addRule, removeRule, clearRules, formatRulesForPrompt, } from "./rules.js";
37
+ export type { RuleLimits, RuleOpResult, AddRuleResult } from "./rules.js";
38
38
  export { rebuildCompressionState } from "./rebuild.js";
39
39
  export type { RebuildResult, RebuildPorts } from "./rebuild.js";
40
40
  export { parseCompressArgs } from "./parse-compress-input.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ import {
24
24
  coveredMessageIds,
25
25
  createInitialState,
26
26
  highestActiveTier
27
- } from "./chunk-HVB3QSSH.js";
27
+ } from "./chunk-5TQA7ZQM.js";
28
28
 
29
29
  // src/refs.ts
30
30
  var REF_WIDTH = 5;
@@ -262,6 +262,8 @@ function syncBlocks(messages, state) {
262
262
  nudge: { ...state.nudge, anchors: { ...state.nudge.anchors } },
263
263
  stats: { ...state.stats },
264
264
  absorbed: (state.absorbed ?? []).map((record) => ({ ...record })),
265
+ rules: (state.rules ?? []).map((rule) => ({ ...rule })),
266
+ nextRuleId: state.nextRuleId,
265
267
  nextBlockId: state.nextBlockId,
266
268
  nextRunId: state.nextRunId
267
269
  };
@@ -388,14 +390,6 @@ function validateConfig(config) {
388
390
  errors.push("absorb.contextThresholdPct must be in [0, 1]");
389
391
  }
390
392
  }
391
- if (config.rules) {
392
- if (config.rules.maxRules !== void 0 && (!Number.isFinite(config.rules.maxRules) || config.rules.maxRules < 1)) {
393
- errors.push("rules.maxRules must be >= 1");
394
- }
395
- if (config.rules.maxRuleChars !== void 0 && (!Number.isFinite(config.rules.maxRuleChars) || config.rules.maxRuleChars < 1)) {
396
- errors.push("rules.maxRuleChars must be >= 1");
397
- }
398
- }
399
393
  return errors;
400
394
  }
401
395
 
@@ -3028,6 +3022,8 @@ function cloneState(state) {
3028
3022
  nudge: { ...state.nudge, anchors: { ...state.nudge.anchors } },
3029
3023
  stats: { ...state.stats },
3030
3024
  absorbed: (state.absorbed ?? []).map((record) => ({ ...record })),
3025
+ rules: (state.rules ?? []).map((rule) => ({ ...rule })),
3026
+ nextRuleId: state.nextRuleId,
3031
3027
  nextBlockId: state.nextBlockId,
3032
3028
  nextRunId: state.nextRunId
3033
3029
  };
@@ -3797,105 +3793,121 @@ function matchSession(sessions, selector, labelOf) {
3797
3793
  // src/rules.ts
3798
3794
  var RULE_TOOL_NAME = "acp_rule";
3799
3795
  var DEFAULT_RULE_LIMITS = Object.freeze({
3800
- maxRules: 50,
3801
- maxRuleChars: 300
3796
+ maxChars: 300,
3797
+ maxCount: 50
3802
3798
  });
3803
- function rulesEnabled(config) {
3804
- return config.rules?.enabled === true;
3805
- }
3806
- function resolveRuleLimits(config) {
3807
- return {
3808
- maxRules: config.rules?.maxRules ?? DEFAULT_RULE_LIMITS.maxRules,
3809
- maxRuleChars: config.rules?.maxRuleChars ?? DEFAULT_RULE_LIMITS.maxRuleChars
3810
- };
3811
- }
3812
3799
  function listRules(state) {
3813
3800
  return state.rules ?? [];
3814
3801
  }
3815
- var RULE_ID_RE = /^rule-(\d+)$/;
3816
- function allocateRuleId(state) {
3817
- let max = 0;
3802
+ var RULE_ID_RE = /^rule(\d+)$/;
3803
+ function highestRuleNumber(state) {
3804
+ let highest = 0;
3818
3805
  for (const rule of state.rules ?? []) {
3819
- const m = RULE_ID_RE.exec(rule.id);
3820
- if (m) max = Math.max(max, Number(m[1]));
3806
+ const match = RULE_ID_RE.exec(rule.id);
3807
+ if (match) highest = Math.max(highest, Number(match[1]));
3821
3808
  }
3822
- return `rule-${max + 1}`;
3809
+ return highest;
3810
+ }
3811
+ function allocateRuleId(state) {
3812
+ const next = Math.max(state.nextRuleId ?? 1, highestRuleNumber(state) + 1);
3813
+ return `rule${next}`;
3823
3814
  }
3824
3815
  function addRule(state, text, limits = {}) {
3825
- const maxRules = limits.maxRules ?? DEFAULT_RULE_LIMITS.maxRules;
3826
- const maxRuleChars = limits.maxRuleChars ?? DEFAULT_RULE_LIMITS.maxRuleChars;
3827
- const clean = text.trim();
3828
- if (clean.length === 0) {
3829
- return { ok: false, error: "rule text must not be empty" };
3816
+ const maxChars = limits.maxChars ?? DEFAULT_RULE_LIMITS.maxChars;
3817
+ const maxCount = limits.maxCount ?? DEFAULT_RULE_LIMITS.maxCount;
3818
+ const trimmed = (text ?? "").trim();
3819
+ if (!trimmed) {
3820
+ return {
3821
+ state,
3822
+ ok: false,
3823
+ resultText: "acp_rule failed: text is empty \u2014 provide the reminder to remember."
3824
+ };
3830
3825
  }
3831
- if (clean.length > maxRuleChars) {
3826
+ if (trimmed.length > maxChars) {
3832
3827
  return {
3828
+ state,
3833
3829
  ok: false,
3834
- error: `rule too long (${clean.length} chars, limit ${maxRuleChars}) \u2014 keep rules short and principle-level`
3830
+ resultText: `acp_rule failed: ${trimmed.length} chars exceeds the ${maxChars}-char limit \u2014 keep rules short and principle-level.`
3835
3831
  };
3836
3832
  }
3837
- const existing = state.rules ?? [];
3838
- const dup = existing.find((r) => r.text === clean);
3839
- if (dup) {
3840
- return { ok: false, error: `identical rule already recorded (${dup.id})` };
3833
+ const rules = listRules(state);
3834
+ const duplicate = rules.find((rule2) => rule2.text === trimmed);
3835
+ if (duplicate) {
3836
+ return {
3837
+ state,
3838
+ ok: false,
3839
+ resultText: `acp_rule failed: identical rule already exists (${duplicate.id}) \u2014 no change.`
3840
+ };
3841
3841
  }
3842
- if (existing.length >= maxRules) {
3842
+ if (rules.length >= maxCount) {
3843
3843
  return {
3844
+ state,
3844
3845
  ok: false,
3845
- error: `rule limit reached (${maxRules}) \u2014 stale rules can be dropped by editing the session state file`
3846
+ resultText: `acp_rule failed: rule limit reached (${maxCount}) \u2014 remove or clear outdated rules first.`
3846
3847
  };
3847
3848
  }
3848
- const rule = { id: allocateRuleId(state), text: clean };
3849
- state.rules = [...existing, rule];
3850
- return { ok: true, rule };
3849
+ const next = Math.max(state.nextRuleId ?? 1, highestRuleNumber(state) + 1);
3850
+ const rule = { id: `rule${next}`, text: trimmed };
3851
+ const stateAfter = {
3852
+ ...state,
3853
+ rules: [...rules, rule],
3854
+ nextRuleId: next + 1
3855
+ };
3856
+ return {
3857
+ state: stateAfter,
3858
+ ok: true,
3859
+ resultText: `rule recorded as ${rule.id}. It stays in the system prompt every turn and is protected from compression.`,
3860
+ rule
3861
+ };
3851
3862
  }
3852
3863
  function removeRule(state, id) {
3853
- const existing = state.rules ?? [];
3854
- const next = existing.filter((r) => r.id !== id);
3855
- if (next.length === existing.length) return false;
3856
- state.rules = next;
3857
- return true;
3864
+ const rules = listRules(state);
3865
+ const target = rules.find((rule) => rule.id === id.trim());
3866
+ if (!target) {
3867
+ return {
3868
+ state,
3869
+ ok: false,
3870
+ resultText: `acp_rule failed: no rule with id "${id}" (use action "list" to see current rules).`
3871
+ };
3872
+ }
3873
+ const stateAfter = {
3874
+ ...state,
3875
+ rules: rules.filter((rule) => rule.id !== target.id)
3876
+ };
3877
+ return {
3878
+ state: stateAfter,
3879
+ ok: true,
3880
+ resultText: `rule removed (${target.id}). Its id will never be re-issued.`
3881
+ };
3858
3882
  }
3859
3883
  function clearRules(state) {
3860
- const count = (state.rules ?? []).length;
3861
- state.rules = [];
3862
- return count;
3884
+ const rules = listRules(state);
3885
+ if (rules.length === 0) {
3886
+ return { state, ok: true, resultText: "no rules to clear." };
3887
+ }
3888
+ const stateAfter = { ...state, rules: [] };
3889
+ return {
3890
+ state: stateAfter,
3891
+ ok: true,
3892
+ resultText: `all ${rules.length} rule(s) cleared. Issued ids will never be re-issued.`
3893
+ };
3863
3894
  }
3864
- function formatRulesList(rules) {
3895
+ function formatRulesForPrompt(state) {
3896
+ const rules = listRules(state);
3865
3897
  if (rules.length === 0) return "";
3866
- const lines = rules.map((r, i) => `${i + 1}. ${r.text}`);
3867
- return `Recorded rules (${rules.length}):
3898
+ const lines = rules.map((rule) => `- [${rule.id}] ${rule.text}`);
3899
+ return `PERSISTENT USER RULES (${RULE_TOOL_NAME}) \u2014 these reminders apply to every turn of this session and take precedence over default behavior:
3868
3900
  ${lines.join("\n")}`;
3869
3901
  }
3870
- var RULE_TOOL_DESCRIPTION = "Record a short, principle-level reminder so it survives context compression \u2014 the call and its result are protected and stay in context. Record when: the user calls out or repeatedly emphasizes a lesson; the user asks you to remember or follow a behavior; you personally hit a major pitfall worth remembering long-term. Keep each rule to one short line. Omit the rule argument to list recorded rules.";
3871
- var RULE_PARAMETERS = {
3872
- type: "object",
3873
- properties: {
3874
- rule: {
3875
- type: "string",
3876
- description: "Short principle-level reminder to record. Omit to list recorded rules."
3877
- }
3878
- }
3879
- };
3880
- var RULE_TOOL = {
3881
- name: RULE_TOOL_NAME,
3882
- description: RULE_TOOL_DESCRIPTION,
3883
- input_schema: RULE_PARAMETERS
3884
- };
3885
- var RULE_TOOL_OPENAI = {
3886
- type: "function",
3887
- function: {
3888
- name: RULE_TOOL_NAME,
3889
- description: RULE_TOOL_DESCRIPTION,
3890
- parameters: RULE_PARAMETERS
3891
- }
3892
- };
3893
- var RULE_TOOL_RESPONSES = {
3894
- type: "function",
3895
- name: RULE_TOOL_NAME,
3896
- description: RULE_TOOL_DESCRIPTION,
3897
- parameters: RULE_PARAMETERS
3898
- };
3902
+ var RULES_USAGE_PROMPT = `PERSISTENT REMINDERS (${RULE_TOOL_NAME})
3903
+
3904
+ You can record persistent reminders that are injected into your system prompt for every remaining turn of this session. Call ${RULE_TOOL_NAME}({ action: "add", text }) when:
3905
+ - the user singles out a lesson, constraint, or preference ("remember this", "never do X again");
3906
+ - the user emphasizes the same point repeatedly;
3907
+ - the user asks you to remember a behavior or setting;
3908
+ - you hit a significant pitfall worth not repeating (build failure, wrong assumption, environment quirk).
3909
+
3910
+ Rules must be SHORT and principle-level (max ${DEFAULT_RULE_LIMITS.maxChars} chars each, ${DEFAULT_RULE_LIMITS.maxCount} total) \u2014 record the rule, not the incident. Check existing rules first (action: "list") and never add duplicates. Drop outdated rules with action: "remove" (pass the rule id) or wipe all with action: "clear". Recorded rules survive context compression: their tool calls are hard-protected.`;
3899
3911
 
3900
3912
  // src/parse-compress-input.ts
3901
3913
  function parseCompressArgs(input, opts) {
@@ -4808,11 +4820,8 @@ export {
4808
4820
  DEFAULT_RULE_LIMITS,
4809
4821
  HOW_TO_COMPRESS_RULES,
4810
4822
  LEAN_HOW_TO_COMPRESS,
4811
- RULE_TOOL,
4812
- RULE_TOOL_DESCRIPTION,
4823
+ RULES_USAGE_PROMPT,
4813
4824
  RULE_TOOL_NAME,
4814
- RULE_TOOL_OPENAI,
4815
- RULE_TOOL_RESPONSES,
4816
4825
  SEARCH_CONTEXT_TOOL,
4817
4826
  SEARCH_CONTEXT_TOOL_NAME,
4818
4827
  SEARCH_CONTEXT_TOOL_OPENAI,
@@ -4873,7 +4882,7 @@ export {
4873
4882
  findBlocksOverlappingMessages,
4874
4883
  formatCreatedBlocks,
4875
4884
  formatRanges,
4876
- formatRulesList,
4885
+ formatRulesForPrompt,
4877
4886
  getMessageFilter,
4878
4887
  getSearchAlgorithm,
4879
4888
  hideAbsorbedMessages,
@@ -4916,9 +4925,7 @@ export {
4916
4925
  resolveBlockSpan,
4917
4926
  resolveBoundaries,
4918
4927
  resolvePrompts,
4919
- resolveRuleLimits,
4920
4928
  resolveTransformChannel,
4921
- rulesEnabled,
4922
4929
  runPipeline,
4923
4930
  sanitizePackSurface,
4924
4931
  searchBlocks,