@cortexkit/opencode-magic-context 0.3.1 → 0.3.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"storage-db.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/storage-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiBtC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAuPrD;AA6BD,wBAAgB,YAAY,IAAI,QAAQ,CAqCvC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAEzD;AAED,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAEvE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAUpC;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"storage-db.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/storage-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiBtC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAwPrD;AA6BD,wBAAgB,YAAY,IAAI,QAAQ,CAqCvC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAEzD;AAED,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAEvE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAUpC;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { Database } from "bun:sqlite";
2
2
  import type { TagEntry } from "./types";
3
- export declare function insertTag(db: Database, sessionId: string, messageId: string, type: TagEntry["type"], byteSize: number, tagNumber: number): number;
3
+ export declare function insertTag(db: Database, sessionId: string, messageId: string, type: TagEntry["type"], byteSize: number, tagNumber: number, reasoningByteSize?: number): number;
4
4
  export declare function updateTagStatus(db: Database, sessionId: string, tagId: number, status: TagEntry["status"]): void;
5
5
  export declare function updateTagMessageId(db: Database, sessionId: string, tagId: number, messageId: string): void;
6
6
  export declare function deleteTagsByMessageId(db: Database, sessionId: string, messageId: string): number[];
@@ -1 +1 @@
1
- {"version":3,"file":"storage-tags.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/storage-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuIxC,wBAAgB,SAAS,CACrB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB,MAAM,CAIR;AAED,wBAAgB,eAAe,CAC3B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAC3B,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAClB,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,MAAM,EAAE,CAoBV;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAS5E;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAY1F;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAapF"}
1
+ {"version":3,"file":"storage-tags.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/storage-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA0IxC,wBAAgB,SAAS,CACrB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,iBAAiB,GAAE,MAAU,GAC9B,MAAM,CAWR;AAED,wBAAgB,eAAe,CAC3B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAC3B,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAClB,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,MAAM,EAAE,CAoBV;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,EAAE,CAS5E;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAY1F;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAapF"}
@@ -1,7 +1,7 @@
1
1
  import type { Database } from "bun:sqlite";
2
2
  import type { TagEntry } from "./types";
3
3
  export interface Tagger {
4
- assignTag(sessionId: string, messageId: string, type: TagEntry["type"], byteSize: number, db: Database): number;
4
+ assignTag(sessionId: string, messageId: string, type: TagEntry["type"], byteSize: number, db: Database, reasoningByteSize?: number): number;
5
5
  getTag(sessionId: string, messageId: string): number | undefined;
6
6
  bindTag(sessionId: string, messageId: string, tagNumber: number): void;
7
7
  getAssignments(sessionId: string): ReadonlyMap<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"tagger.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/tagger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,MAAM,WAAW,MAAM;IACnB,SAAS,CACL,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,QAAQ,GACb,MAAM,CAAC;IACV,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACjE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAuCD,wBAAgB,YAAY,IAAI,MAAM,CA2GrC"}
1
+ {"version":3,"file":"tagger.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/tagger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,MAAM,WAAW,MAAM;IACnB,SAAS,CACL,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,QAAQ,EACZ,iBAAiB,CAAC,EAAE,MAAM,GAC3B,MAAM,CAAC;IACV,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACjE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAuCD,wBAAgB,YAAY,IAAI,MAAM,CA4GrC"}
@@ -4,6 +4,7 @@ export interface TagEntry {
4
4
  type: "message" | "tool" | "file";
5
5
  status: "active" | "dropped" | "compacted";
6
6
  byteSize: number;
7
+ reasoningByteSize: number;
7
8
  sessionId: string;
8
9
  }
9
10
  export interface PendingOp {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B,EAAE,MAAM,CAAC;IACrC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,0BAA0B,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7D,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B,EAAE,MAAM,CAAC;IACrC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,0BAA0B,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB"}
@@ -10,5 +10,5 @@ export interface CompartmentTriggerResult {
10
10
  reason?: "projected_headroom" | "force_80" | "commit_clusters" | "tail_size";
11
11
  }
12
12
  export declare function getProactiveCompartmentTriggerPercentage(executeThresholdPercentage: number): number;
13
- export declare function checkCompartmentTrigger(db: Database, sessionId: string, sessionMeta: SessionMeta, usage: ContextUsage, _previousPercentage: number, executeThresholdPercentage: number, compartmentTokenBudget?: number): CompartmentTriggerResult;
13
+ export declare function checkCompartmentTrigger(db: Database, sessionId: string, sessionMeta: SessionMeta, usage: ContextUsage, _previousPercentage: number, executeThresholdPercentage: number, compartmentTokenBudget?: number, autoDropToolAge?: number, protectedTagCount?: number, clearReasoningAge?: number): CompartmentTriggerResult;
14
14
  //# sourceMappingURL=compartment-trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compartment-trigger.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/compartment-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAUpF,QAAA,MAAM,sBAAsB,OAAO,CAAC;AAKpC,QAAA,MAAM,4BAA4B,KAAK,CAAC;AACxC,QAAA,MAAM,2BAA2B,KAAK,CAAC;AACvC,QAAA,MAAM,4BAA4B,KAAK,CAAC;AAExC,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,GACzB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,oBAAoB,GAAG,UAAU,GAAG,iBAAiB,GAAG,WAAW,CAAC;CAChF;AAED,wBAAgB,wCAAwC,CACpD,0BAA0B,EAAE,MAAM,GACnC,MAAM,CAER;AAwFD,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,YAAY,EACnB,mBAAmB,EAAE,MAAM,EAC3B,0BAA0B,EAAE,MAAM,EAClC,sBAAsB,GAAE,MAAyC,GAClE,wBAAwB,CAsF1B"}
1
+ {"version":3,"file":"compartment-trigger.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/compartment-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAUpF,QAAA,MAAM,sBAAsB,OAAO,CAAC;AAKpC,QAAA,MAAM,4BAA4B,KAAK,CAAC;AACxC,QAAA,MAAM,2BAA2B,KAAK,CAAC;AACvC,QAAA,MAAM,4BAA4B,KAAK,CAAC;AAExC,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,sBAAsB,GACzB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,oBAAoB,GAAG,UAAU,GAAG,iBAAiB,GAAG,WAAW,CAAC;CAChF;AAED,wBAAgB,wCAAwC,CACpD,0BAA0B,EAAE,MAAM,GACnC,MAAM,CAER;AAsID,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,YAAY,EACnB,mBAAmB,EAAE,MAAM,EAC3B,0BAA0B,EAAE,MAAM,EAClC,sBAAsB,GAAE,MAAyC,EACjE,eAAe,CAAC,EAAE,MAAM,EACxB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,iBAAiB,CAAC,EAAE,MAAM,GAC3B,wBAAwB,CA8F1B"}
@@ -14,6 +14,8 @@ export interface EventHandlerDeps {
14
14
  onSessionCacheInvalidated?: (sessionId: string) => void;
15
15
  config: {
16
16
  protected_tags: number;
17
+ auto_drop_tool_age?: number;
18
+ clear_reasoning_age?: number;
17
19
  execute_threshold_percentage?: number | {
18
20
  default: number;
19
21
  [modelKey: string]: number;
@@ -1 +1 @@
1
- {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAkBvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAiBvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,UAAU,iBAAiB;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAOD,MAAM,WAAW,gBAAgB;IAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,iBAAiB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IAC9D,eAAe,EAAE,mBAAmB,CAAC;IACrC,yBAAyB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE;QACJ,cAAc,EAAE,MAAM,CAAC;QACvB,4BAA4B,CAAC,EAAE,MAAM,GAAG;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QACxF,SAAS,EAAE,cAAc,CAAC;QAC1B,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjD,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,UAAU,CAAC,cAAc,sCAAsC,EAAE,YAAY,CAAC,CAAC;CACtF;AAqGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,IACvC,OAAO;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CA0OzF"}
1
+ {"version":3,"file":"event-handler.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/event-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAkBvF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAiBvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,UAAU,iBAAiB;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAOD,MAAM,WAAW,gBAAgB;IAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,iBAAiB,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IAC9D,eAAe,EAAE,mBAAmB,CAAC;IACrC,yBAAyB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,MAAM,EAAE;QACJ,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,4BAA4B,CAAC,EAAE,MAAM,GAAG;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QACxF,SAAS,EAAE,cAAc,CAAC;QAC1B,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjD,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,UAAU,CAAC,cAAc,sCAAsC,EAAE,YAAY,CAAC,CAAC;CACtF;AAqGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,IACvC,OAAO;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CA8OzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"tag-messages.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/tag-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAWlE,OAAO,EAGH,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,iBAAiB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG;IACpB,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,kBAAkB,EAAE,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzD,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;CAC5B;AAuBD,wBAAgB,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,eAAe,GACpB,iBAAiB,CA+OnB"}
1
+ {"version":3,"file":"tag-messages.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/tag-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAWlE,OAAO,EAGH,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,iBAAiB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG;IACpB,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,kBAAkB,EAAE,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzD,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;CAC5B;AAoCD,wBAAgB,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,eAAe,GACpB,iBAAiB,CAoPnB"}
package/dist/index.js CHANGED
@@ -16353,6 +16353,7 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
16353
16353
  ensureColumn(db, "session_meta", "memory_block_cache", "TEXT DEFAULT ''");
16354
16354
  ensureColumn(db, "session_meta", "memory_block_count", "INTEGER DEFAULT 0");
16355
16355
  ensureColumn(db, "dream_queue", "retry_count", "INTEGER DEFAULT 0");
16356
+ ensureColumn(db, "tags", "reasoning_byte_size", "INTEGER DEFAULT 0");
16356
16357
  }
16357
16358
  function ensureColumn(db, table, column, definition) {
16358
16359
  if (!/^[a-z_]+$/.test(table) || !/^[a-z_]+$/.test(column) || !/^[A-Z0-9_'(),\s]+$/i.test(definition)) {
@@ -16811,7 +16812,7 @@ var getMaxTagNumberBySessionStatements = new WeakMap;
16811
16812
  function getInsertTagStatement(db) {
16812
16813
  let stmt = insertTagStatements.get(db);
16813
16814
  if (!stmt) {
16814
- stmt = db.prepare("INSERT INTO tags (session_id, message_id, type, byte_size, tag_number) VALUES (?, ?, ?, ?, ?)");
16815
+ stmt = db.prepare("INSERT INTO tags (session_id, message_id, type, byte_size, reasoning_byte_size, tag_number) VALUES (?, ?, ?, ?, ?, ?)");
16815
16816
  insertTagStatements.set(db, stmt);
16816
16817
  }
16817
16818
  return stmt;
@@ -16871,6 +16872,7 @@ function toTagEntry(row) {
16871
16872
  type,
16872
16873
  status,
16873
16874
  byteSize: row.byte_size,
16875
+ reasoningByteSize: row.reasoning_byte_size ?? 0,
16874
16876
  sessionId: row.session_id
16875
16877
  };
16876
16878
  }
@@ -16889,8 +16891,8 @@ function isMaxTagNumberRow(row) {
16889
16891
  function escapeLikePattern(value) {
16890
16892
  return value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
16891
16893
  }
16892
- function insertTag(db, sessionId, messageId, type, byteSize2, tagNumber) {
16893
- getInsertTagStatement(db).run(sessionId, messageId, type, byteSize2, tagNumber);
16894
+ function insertTag(db, sessionId, messageId, type, byteSize2, tagNumber, reasoningByteSize = 0) {
16895
+ getInsertTagStatement(db).run(sessionId, messageId, type, byteSize2, reasoningByteSize, tagNumber);
16894
16896
  return tagNumber;
16895
16897
  }
16896
16898
  function updateTagStatus(db, sessionId, tagId, status) {
@@ -16915,14 +16917,14 @@ function getMaxTagNumberBySession(db, sessionId) {
16915
16917
  return isMaxTagNumberRow(row) ? row.max_tag_number : 0;
16916
16918
  }
16917
16919
  function getTagsBySession(db, sessionId) {
16918
- const rows = db.prepare("SELECT id, message_id, type, status, byte_size, session_id, tag_number FROM tags WHERE session_id = ? ORDER BY tag_number ASC, id ASC").all(sessionId).filter(isTagRow);
16920
+ const rows = db.prepare("SELECT id, message_id, type, status, byte_size, reasoning_byte_size, session_id, tag_number FROM tags WHERE session_id = ? ORDER BY tag_number ASC, id ASC").all(sessionId).filter(isTagRow);
16919
16921
  return rows.map(toTagEntry);
16920
16922
  }
16921
16923
  function getTopNBySize(db, sessionId, n) {
16922
16924
  if (n <= 0) {
16923
16925
  return [];
16924
16926
  }
16925
- const rows = db.prepare("SELECT id, message_id, type, status, byte_size, session_id, tag_number FROM tags WHERE session_id = ? AND status = 'active' ORDER BY byte_size DESC, tag_number ASC LIMIT ?").all(sessionId, n).filter(isTagRow);
16927
+ const rows = db.prepare("SELECT id, message_id, type, status, byte_size, reasoning_byte_size, session_id, tag_number FROM tags WHERE session_id = ? AND status = 'active' ORDER BY byte_size DESC, tag_number ASC LIMIT ?").all(sessionId, n).filter(isTagRow);
16926
16928
  return rows.map(toTagEntry);
16927
16929
  }
16928
16930
  // src/plugin/dream-timer.ts
@@ -17142,7 +17144,7 @@ function createTagger() {
17142
17144
  }
17143
17145
  return map2;
17144
17146
  }
17145
- function assignTag(sessionId, messageId, type, byteSize2, db) {
17147
+ function assignTag(sessionId, messageId, type, byteSize2, db, reasoningByteSize = 0) {
17146
17148
  const sessionAssignments = getSessionAssignments(sessionId);
17147
17149
  const existing = sessionAssignments.get(messageId);
17148
17150
  if (existing !== undefined) {
@@ -17151,7 +17153,7 @@ function createTagger() {
17151
17153
  const current = counters.get(sessionId) ?? 0;
17152
17154
  const next = current + 1;
17153
17155
  db.transaction(() => {
17154
- insertTag(db, sessionId, messageId, type, byteSize2, next);
17156
+ insertTag(db, sessionId, messageId, type, byteSize2, next, reasoningByteSize);
17155
17157
  getUpsertCounterStatement(db).run(sessionId, next);
17156
17158
  })();
17157
17159
  counters.set(sessionId, next);
@@ -17287,17 +17289,50 @@ var FORCE_MATERIALIZE_PERCENTAGE = 85;
17287
17289
  function getProactiveCompartmentTriggerPercentage(executeThresholdPercentage) {
17288
17290
  return Math.max(0, executeThresholdPercentage - PROACTIVE_TRIGGER_OFFSET_PERCENTAGE);
17289
17291
  }
17290
- function estimateProjectedPostDropPercentage(db, sessionId, usage) {
17291
- const pendingDrops = getPendingOps(db, sessionId).filter((op) => op.operation === "drop");
17292
- if (pendingDrops.length === 0)
17293
- return null;
17292
+ function estimateProjectedPostDropPercentage(db, sessionId, usage, autoDropToolAge, protectedTags, clearReasoningAge, clearedReasoningThroughTag) {
17294
17293
  const activeTags = getTagsBySession(db, sessionId).filter((tag) => tag.status === "active");
17295
- const totalActiveBytes = activeTags.reduce((sum, tag) => sum + tag.byteSize, 0);
17294
+ const totalActiveBytes = activeTags.reduce((sum, tag) => sum + tag.byteSize + tag.reasoningByteSize, 0);
17296
17295
  if (totalActiveBytes === 0)
17297
17296
  return null;
17297
+ let droppableBytes = 0;
17298
+ const pendingDrops = getPendingOps(db, sessionId).filter((op) => op.operation === "drop");
17298
17299
  const pendingDropTagIds = new Set(pendingDrops.map((op) => op.tagId));
17299
- const pendingDropBytes = activeTags.filter((tag) => pendingDropTagIds.has(tag.tagNumber)).reduce((sum, tag) => sum + tag.byteSize, 0);
17300
- const dropRatio = pendingDropBytes / totalActiveBytes;
17300
+ if (pendingDrops.length > 0) {
17301
+ droppableBytes += activeTags.filter((tag) => pendingDropTagIds.has(tag.tagNumber)).reduce((sum, tag) => sum + tag.byteSize + tag.reasoningByteSize, 0);
17302
+ }
17303
+ const maxTag = activeTags.reduce((max, t) => Math.max(max, t.tagNumber), 0);
17304
+ if (autoDropToolAge !== undefined && protectedTags !== undefined) {
17305
+ const toolAgeCutoff = maxTag - autoDropToolAge;
17306
+ const protectedCutoff = maxTag - protectedTags;
17307
+ for (const tag of activeTags) {
17308
+ if (pendingDropTagIds.has(tag.tagNumber))
17309
+ continue;
17310
+ if (tag.tagNumber > protectedCutoff)
17311
+ continue;
17312
+ if (tag.type === "tool" && tag.tagNumber <= toolAgeCutoff) {
17313
+ droppableBytes += tag.byteSize + tag.reasoningByteSize;
17314
+ }
17315
+ }
17316
+ }
17317
+ if (clearReasoningAge !== undefined && clearedReasoningThroughTag !== undefined) {
17318
+ const reasoningAgeCutoff = maxTag - clearReasoningAge;
17319
+ for (const tag of activeTags) {
17320
+ if (tag.type !== "message")
17321
+ continue;
17322
+ if (pendingDropTagIds.has(tag.tagNumber))
17323
+ continue;
17324
+ if (tag.tagNumber <= clearedReasoningThroughTag)
17325
+ continue;
17326
+ if (tag.tagNumber > reasoningAgeCutoff)
17327
+ continue;
17328
+ if (tag.reasoningByteSize > 0) {
17329
+ droppableBytes += tag.reasoningByteSize;
17330
+ }
17331
+ }
17332
+ }
17333
+ if (droppableBytes === 0)
17334
+ return null;
17335
+ const dropRatio = Math.min(droppableBytes / totalActiveBytes, 1);
17301
17336
  return usage.percentage * (1 - dropRatio);
17302
17337
  }
17303
17338
  var TAIL_INFO_DEFAULTS = {
@@ -17334,7 +17369,7 @@ function getUnsummarizedTailInfo(db, sessionId, compartmentTokenBudget) {
17334
17369
  }
17335
17370
  });
17336
17371
  }
17337
- function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPercentage, executeThresholdPercentage, compartmentTokenBudget = DEFAULT_COMPARTMENT_TOKEN_BUDGET) {
17372
+ function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPercentage, executeThresholdPercentage, compartmentTokenBudget = DEFAULT_COMPARTMENT_TOKEN_BUDGET, autoDropToolAge, protectedTagCount, clearReasoningAge) {
17338
17373
  if (sessionMeta.compartmentInProgress) {
17339
17374
  return { shouldFire: false };
17340
17375
  }
@@ -17342,7 +17377,7 @@ function checkCompartmentTrigger(db, sessionId, sessionMeta, usage, _previousPer
17342
17377
  if (!tailInfo.hasNewRawHistory) {
17343
17378
  return { shouldFire: false };
17344
17379
  }
17345
- const projectedPostDropPercentage = estimateProjectedPostDropPercentage(db, sessionId, usage);
17380
+ const projectedPostDropPercentage = estimateProjectedPostDropPercentage(db, sessionId, usage, autoDropToolAge, protectedTagCount, clearReasoningAge, sessionMeta.clearedReasoningThroughTag);
17346
17381
  const relativePostDropTarget = executeThresholdPercentage * POST_DROP_TARGET_RATIO;
17347
17382
  if (usage.percentage >= FORCE_COMPARTMENT_PERCENTAGE) {
17348
17383
  if (projectedPostDropPercentage !== null && projectedPostDropPercentage <= relativePostDropTarget) {
@@ -17989,7 +18024,7 @@ function createEventHandler2(deps) {
17989
18024
  const sessionMeta = getOrCreateSessionMeta(deps.db, info.sessionID);
17990
18025
  const previousPercentage = sessionMeta.lastContextPercentage;
17991
18026
  if (!sessionMeta.isSubagent) {
17992
- const triggerResult = checkCompartmentTrigger(deps.db, info.sessionID, sessionMeta, { percentage, inputTokens: totalInputTokens }, previousPercentage, resolveExecuteThreshold(deps.config.execute_threshold_percentage ?? 65, modelKey, 65));
18027
+ const triggerResult = checkCompartmentTrigger(deps.db, info.sessionID, sessionMeta, { percentage, inputTokens: totalInputTokens }, previousPercentage, resolveExecuteThreshold(deps.config.execute_threshold_percentage ?? 65, modelKey, 65), undefined, deps.config.auto_drop_tool_age ?? 100, deps.config.protected_tags, deps.config.clear_reasoning_age ?? 50);
17993
18028
  if (triggerResult.shouldFire) {
17994
18029
  sessionLog(info.sessionID, `compartment trigger: firing (reason=${triggerResult.reason})`);
17995
18030
  updateSessionMeta(deps.db, info.sessionID, {
@@ -21119,6 +21154,16 @@ function collectRelevantSourceTagIds(messages, assignments) {
21119
21154
  }
21120
21155
  return Array.from(relevantTagIds);
21121
21156
  }
21157
+ function getReasoningByteSize(parts) {
21158
+ let reasoningBytes = 0;
21159
+ for (const part of parts) {
21160
+ const content = part.thinking ?? part.text ?? "";
21161
+ if (content && content !== "[cleared]") {
21162
+ reasoningBytes += byteSize(content);
21163
+ }
21164
+ }
21165
+ return reasoningBytes;
21166
+ }
21122
21167
  function tagMessages(sessionId, messages, tagger, db) {
21123
21168
  const targets = new Map;
21124
21169
  const reasoningByMessage = new Map;
@@ -21179,7 +21224,8 @@ function tagMessages(sessionId, messages, tagger, db) {
21179
21224
  const thinkingParts = messageThinkingParts;
21180
21225
  const contentId = `${messageId}:p${partIndex}`;
21181
21226
  const existingTagId = resolver.resolve(messageId, "message", contentId, textOrdinal);
21182
- const tagId = tagger.assignTag(sessionId, contentId, "message", byteSize(textPart.text), db);
21227
+ const reasoningBytes = textOrdinal === 0 ? getReasoningByteSize(thinkingParts) : 0;
21228
+ const tagId = tagger.assignTag(sessionId, contentId, "message", byteSize(textPart.text), db, reasoningBytes);
21183
21229
  if (existingTagId === undefined) {
21184
21230
  const sourceContent = stripTagPrefix(textPart.text);
21185
21231
  if (sourceContent.trim().length > 0) {
@@ -21215,7 +21261,8 @@ function tagMessages(sessionId, messages, tagger, db) {
21215
21261
  if (isToolPartWithOutput(part)) {
21216
21262
  const toolPart = part;
21217
21263
  const thinkingParts = precedingThinkingParts;
21218
- const tagId = tagger.assignTag(sessionId, toolPart.callID, "tool", byteSize(toolPart.state.output), db);
21264
+ const reasoningBytes = getReasoningByteSize(thinkingParts);
21265
+ const tagId = tagger.assignTag(sessionId, toolPart.callID, "tool", byteSize(toolPart.state.output), db, reasoningBytes);
21219
21266
  messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
21220
21267
  toolPart.state.output = prependTag(tagId, toolPart.state.output);
21221
21268
  toolTagByCallId.set(toolPart.callID, tagId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/opencode-magic-context",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "description": "OpenCode plugin for Magic Context — cross-session memory and context management",
6
6
  "main": "dist/index.js",