@cortexkit/opencode-magic-context 0.15.6 → 0.15.7

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":"migrations.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsQ3C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAkChD"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/features/magic-context/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkT3C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAkChD"}
@@ -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;AAkBtC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA8TrD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAsHD,wBAAgB,YAAY,IAAI,QAAQ,CAsCvC;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;AAkBtC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA+TrD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAsHD,wBAAgB,YAAY,IAAI,QAAQ,CAsCvC;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"}
@@ -14,6 +14,14 @@ export declare function updateCavemanDepth(db: Database, sessionId: string, tagN
14
14
  export declare function updateTagMessageId(db: Database, sessionId: string, tagId: number, messageId: string): void;
15
15
  export declare function deleteTagsByMessageId(db: Database, sessionId: string, messageId: string): number[];
16
16
  export declare function getMaxTagNumberBySession(db: Database, sessionId: string): number;
17
+ /**
18
+ * Look up the tag_number assigned to a specific (session_id, message_id).
19
+ *
20
+ * Used by the tagger's recovery path to bind an existing DB-assigned tag back
21
+ * into the in-memory assignment map without bumping the counter past the DB's
22
+ * actual max. Returns null when no tag exists for that message yet.
23
+ */
24
+ export declare function getTagNumberByMessageId(db: Database, sessionId: string, messageId: string): number | null;
17
25
  export declare function getTagsBySession(db: Database, sessionId: string): TagEntry[];
18
26
  export declare function getTagById(db: Database, sessionId: string, tagId: number): TagEntry | null;
19
27
  export declare function getTopNBySize(db: Database, sessionId: string, n: number): TagEntry[];
@@ -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;AAiKxC,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,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,aAAa,GAAE,MAAU,GAC1B,MAAM,CAaR;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,iBAAiB,CAC7B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC/B,IAAI,CAEN;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACd,IAAI,CAMN;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;AA6KxC,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,EAC7B,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,aAAa,GAAE,MAAU,GAC1B,MAAM,CAaR;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,iBAAiB,CAC7B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC/B,IAAI,CAEN;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACd,IAAI,CAMN;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;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAGf;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 +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,EACZ,iBAAiB,CAAC,EAAE,MAAM,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,CAAC,EAAE,MAAM,GACvB,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,CA4IrC"}
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,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,CAAC,EAAE,MAAM,GACvB,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;AAuED,wBAAgB,YAAY,IAAI,MAAM,CA4NrC"}
@@ -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;AAYlE,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,QAAQ,CAAC,EAAE,MAAM,cAAc,CAAC;IAChC,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;AAkED,MAAM,WAAW,kBAAkB;IAC/B;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,eAAe,EACnB,OAAO,GAAE,kBAAuB,GACjC,iBAAiB,CA4PnB"}
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;AAYlE,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,QAAQ,CAAC,EAAE,MAAM,cAAc,CAAC;IAChC,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;AAkED,MAAM,WAAW,kBAAkB;IAC/B;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,WAAW,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,eAAe,EACnB,OAAO,GAAE,kBAAuB,GACjC,iBAAiB,CAmQnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/transform.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -158357,6 +158357,24 @@ var init_migrations = __esm(() => {
158357
158357
  up: (db) => {
158358
158358
  healAllNullColumns(db);
158359
158359
  }
158360
+ },
158361
+ {
158362
+ version: 6,
158363
+ description: "Heal session_meta.counter drift below MAX(tag_number)",
158364
+ up: (db) => {
158365
+ db.prepare(`UPDATE session_meta
158366
+ SET counter = (
158367
+ SELECT MAX(tag_number)
158368
+ FROM tags
158369
+ WHERE tags.session_id = session_meta.session_id
158370
+ )
158371
+ WHERE EXISTS (
158372
+ SELECT 1
158373
+ FROM tags
158374
+ WHERE tags.session_id = session_meta.session_id
158375
+ AND tags.tag_number > session_meta.counter
158376
+ )`).run();
158377
+ }
158360
158378
  }
158361
158379
  ];
158362
158380
  });
@@ -158569,6 +158587,7 @@ CREATE INDEX IF NOT EXISTS idx_dream_queue_pending ON dream_queue(started_at, en
158569
158587
  );
158570
158588
 
158571
158589
  CREATE INDEX IF NOT EXISTS idx_tags_session_tag_number ON tags(session_id, tag_number);
158590
+ CREATE INDEX IF NOT EXISTS idx_tags_session_message_id ON tags(session_id, message_id);
158572
158591
  CREATE INDEX IF NOT EXISTS idx_pending_ops_session ON pending_ops(session_id);
158573
158592
  CREATE INDEX IF NOT EXISTS idx_pending_ops_session_tag_id ON pending_ops(session_id, tag_id);
158574
158593
  CREATE INDEX IF NOT EXISTS idx_source_contents_session ON source_contents(session_id);
@@ -159382,6 +159401,14 @@ function getMaxTagNumberBySessionStatement(db) {
159382
159401
  }
159383
159402
  return stmt;
159384
159403
  }
159404
+ function getTagNumberByMessageIdStatement(db) {
159405
+ let stmt = getTagNumberByMessageIdStatements.get(db);
159406
+ if (!stmt) {
159407
+ stmt = db.prepare("SELECT tag_number FROM tags WHERE session_id = ? AND message_id = ? ORDER BY tag_number ASC LIMIT 1");
159408
+ getTagNumberByMessageIdStatements.set(db, stmt);
159409
+ }
159410
+ return stmt;
159411
+ }
159385
159412
  function isTagRow(row) {
159386
159413
  if (row === null || typeof row !== "object")
159387
159414
  return false;
@@ -159451,6 +159478,10 @@ function getMaxTagNumberBySession(db, sessionId) {
159451
159478
  const row = getMaxTagNumberBySessionStatement(db).get(sessionId);
159452
159479
  return isMaxTagNumberRow(row) ? row.max_tag_number : 0;
159453
159480
  }
159481
+ function getTagNumberByMessageId(db, sessionId, messageId) {
159482
+ const row = getTagNumberByMessageIdStatement(db).get(sessionId, messageId);
159483
+ return isTagNumberRow(row) ? row.tag_number : null;
159484
+ }
159454
159485
  function getTagsBySession(db, sessionId) {
159455
159486
  const rows = db.prepare("SELECT id, message_id, type, status, drop_mode, tool_name, input_byte_size, byte_size, reasoning_byte_size, session_id, tag_number, caveman_depth FROM tags WHERE session_id = ? ORDER BY tag_number ASC, id ASC").all(sessionId).filter(isTagRow);
159456
159487
  return rows.map(toTagEntry);
@@ -159462,7 +159493,7 @@ function getTopNBySize(db, sessionId, n) {
159462
159493
  const rows = db.prepare("SELECT id, message_id, type, status, drop_mode, tool_name, input_byte_size, byte_size, reasoning_byte_size, session_id, tag_number, caveman_depth FROM tags WHERE session_id = ? AND status = 'active' ORDER BY byte_size DESC, tag_number ASC LIMIT ?").all(sessionId, n).filter(isTagRow);
159463
159494
  return rows.map(toTagEntry);
159464
159495
  }
159465
- var insertTagStatements, updateTagStatusStatements, updateTagDropModeStatements, updateTagMessageIdStatements, getTagNumbersByMessageIdStatements, deleteTagsByMessageIdStatements, getMaxTagNumberBySessionStatements;
159496
+ var insertTagStatements, updateTagStatusStatements, updateTagDropModeStatements, updateTagMessageIdStatements, getTagNumbersByMessageIdStatements, deleteTagsByMessageIdStatements, getMaxTagNumberBySessionStatements, getTagNumberByMessageIdStatements;
159466
159497
  var init_storage_tags = __esm(() => {
159467
159498
  insertTagStatements = new WeakMap;
159468
159499
  updateTagStatusStatements = new WeakMap;
@@ -159471,6 +159502,7 @@ var init_storage_tags = __esm(() => {
159471
159502
  getTagNumbersByMessageIdStatements = new WeakMap;
159472
159503
  deleteTagsByMessageIdStatements = new WeakMap;
159473
159504
  getMaxTagNumberBySessionStatements = new WeakMap;
159505
+ getTagNumberByMessageIdStatements = new WeakMap;
159474
159506
  });
159475
159507
 
159476
159508
  // src/features/magic-context/storage.ts
@@ -166316,7 +166348,7 @@ function isAssignmentRow(row) {
166316
166348
  var UPSERT_COUNTER_SQL = `
166317
166349
  INSERT INTO session_meta (session_id, counter)
166318
166350
  VALUES (?, ?)
166319
- ON CONFLICT(session_id) DO UPDATE SET counter = excluded.counter
166351
+ ON CONFLICT(session_id) DO UPDATE SET counter = MAX(session_meta.counter, excluded.counter)
166320
166352
  `;
166321
166353
  var upsertCounterStatements = new WeakMap;
166322
166354
  function getUpsertCounterStatement(db) {
@@ -166327,6 +166359,21 @@ function getUpsertCounterStatement(db) {
166327
166359
  }
166328
166360
  return stmt;
166329
166361
  }
166362
+ var RESET_COUNTER_SQL = `
166363
+ INSERT INTO session_meta (session_id, counter)
166364
+ VALUES (?, 0)
166365
+ ON CONFLICT(session_id) DO UPDATE SET counter = 0
166366
+ `;
166367
+ var resetCounterStatements = new WeakMap;
166368
+ function getResetCounterStatement(db) {
166369
+ let stmt = resetCounterStatements.get(db);
166370
+ if (!stmt) {
166371
+ stmt = db.prepare(RESET_COUNTER_SQL);
166372
+ resetCounterStatements.set(db, stmt);
166373
+ }
166374
+ return stmt;
166375
+ }
166376
+ var MAX_TAG_ALLOC_RETRIES = 5;
166330
166377
  function createTagger() {
166331
166378
  const counters = new Map;
166332
166379
  const assignments = new Map;
@@ -166338,32 +166385,56 @@ function createTagger() {
166338
166385
  }
166339
166386
  return map2;
166340
166387
  }
166388
+ function isUniqueConstraintError(error48) {
166389
+ return error48 instanceof Error && "code" in error48 && error48.code === "SQLITE_CONSTRAINT_UNIQUE";
166390
+ }
166391
+ function syncCounterAtLeast(sessionId, db, value) {
166392
+ if (value <= 0)
166393
+ return;
166394
+ const next = Math.max(counters.get(sessionId) ?? 0, value);
166395
+ counters.set(sessionId, next);
166396
+ getUpsertCounterStatement(db).run(sessionId, next);
166397
+ }
166341
166398
  function assignTag(sessionId, messageId, type, byteSize2, db, reasoningByteSize = 0, toolName = null, inputByteSize = 0) {
166342
166399
  const sessionAssignments = getSessionAssignments(sessionId);
166343
166400
  const existing = sessionAssignments.get(messageId);
166344
166401
  if (existing !== undefined) {
166345
166402
  return existing;
166346
166403
  }
166347
- const current = counters.get(sessionId) ?? 0;
166348
- const next = current + 1;
166349
- try {
166350
- db.transaction(() => {
166351
- insertTag(db, sessionId, messageId, type, byteSize2, next, reasoningByteSize, toolName, inputByteSize);
166352
- getUpsertCounterStatement(db).run(sessionId, next);
166353
- })();
166354
- } catch (error48) {
166355
- if (error48 instanceof Error && "code" in error48 && error48.code === "SQLITE_CONSTRAINT_UNIQUE") {
166356
- const row = db.prepare("SELECT tag_number FROM tags WHERE session_id = ? AND message_id = ?").get(sessionId, messageId);
166357
- if (row) {
166358
- sessionAssignments.set(messageId, row.tag_number);
166359
- return row.tag_number;
166404
+ const dbExisting = getTagNumberByMessageId(db, sessionId, messageId);
166405
+ if (dbExisting !== null) {
166406
+ sessionAssignments.set(messageId, dbExisting);
166407
+ syncCounterAtLeast(sessionId, db, dbExisting);
166408
+ return dbExisting;
166409
+ }
166410
+ for (let attempt = 0;attempt < MAX_TAG_ALLOC_RETRIES; attempt += 1) {
166411
+ const memCounter = counters.get(sessionId) ?? 0;
166412
+ const dbMax = getMaxTagNumberBySession(db, sessionId);
166413
+ const next = Math.max(memCounter, dbMax) + 1;
166414
+ try {
166415
+ db.transaction(() => {
166416
+ insertTag(db, sessionId, messageId, type, byteSize2, next, reasoningByteSize, toolName, inputByteSize);
166417
+ getUpsertCounterStatement(db).run(sessionId, next);
166418
+ })();
166419
+ } catch (error48) {
166420
+ if (!isUniqueConstraintError(error48)) {
166421
+ throw error48;
166360
166422
  }
166423
+ const racedRow = getTagNumberByMessageId(db, sessionId, messageId);
166424
+ if (racedRow !== null) {
166425
+ sessionAssignments.set(messageId, racedRow);
166426
+ syncCounterAtLeast(sessionId, db, racedRow);
166427
+ return racedRow;
166428
+ }
166429
+ const advancedDbMax = getMaxTagNumberBySession(db, sessionId);
166430
+ counters.set(sessionId, Math.max(memCounter, advancedDbMax));
166431
+ continue;
166361
166432
  }
166362
- throw error48;
166433
+ counters.set(sessionId, next);
166434
+ sessionAssignments.set(messageId, next);
166435
+ return next;
166363
166436
  }
166364
- counters.set(sessionId, next);
166365
- sessionAssignments.set(messageId, next);
166366
- return next;
166437
+ throw new Error(`tagger.assignTag: failed to allocate tag for session=${sessionId} message=${messageId} after ${MAX_TAG_ALLOC_RETRIES} retries`);
166367
166438
  }
166368
166439
  function getTag(sessionId, messageId) {
166369
166440
  return assignments.get(sessionId)?.get(messageId);
@@ -166377,15 +166448,12 @@ function createTagger() {
166377
166448
  function resetCounter(sessionId, db) {
166378
166449
  counters.set(sessionId, 0);
166379
166450
  assignments.delete(sessionId);
166380
- getUpsertCounterStatement(db).run(sessionId, 0);
166451
+ getResetCounterStatement(db).run(sessionId);
166381
166452
  }
166382
166453
  function getCounter(sessionId) {
166383
166454
  return counters.get(sessionId) ?? 0;
166384
166455
  }
166385
166456
  function initFromDb(sessionId, db) {
166386
- if (counters.has(sessionId)) {
166387
- return;
166388
- }
166389
166457
  const row = db.prepare(GET_COUNTER_SQL).get(sessionId);
166390
166458
  const assignmentRows = db.prepare(GET_ASSIGNMENTS_SQL).all(sessionId).filter(isAssignmentRow);
166391
166459
  const sessionAssignments = getSessionAssignments(sessionId);
@@ -166397,7 +166465,7 @@ function createTagger() {
166397
166465
  maxTagNumber = assignment.tag_number;
166398
166466
  }
166399
166467
  }
166400
- const counter = Math.max(row?.counter ?? 0, maxTagNumber);
166468
+ const counter = Math.max(row?.counter ?? 0, maxTagNumber, counters.get(sessionId) ?? 0);
166401
166469
  counters.set(sessionId, counter);
166402
166470
  }
166403
166471
  function cleanup(sessionId) {
@@ -168734,146 +168802,142 @@ function tagMessages(sessionId, messages, tagger, db, options = {}) {
168734
168802
  const COMMIT_LOOKBACK = 5;
168735
168803
  const COMMIT_HASH_PATTERN2 = /\b[0-9a-f]{7,12}\b/;
168736
168804
  let commitDetected = false;
168737
- db.transaction(() => {
168738
- for (let msgIndex = 0;msgIndex < messages.length; msgIndex++) {
168739
- const message = messages[msgIndex];
168740
- const messageId = typeof message.info.id === "string" ? message.info.id : null;
168741
- if (message.info.role === "user") {
168742
- precedingThinkingParts = [];
168743
- }
168744
- const messageThinkingParts = message.parts.filter(isThinkingPart);
168745
- if (messageThinkingParts.length > 0) {
168746
- reasoningByMessage.set(message, messageThinkingParts);
168747
- }
168748
- const messageHasTextPart = message.parts.some(isTextPart);
168749
- let textOrdinal = 0;
168750
- let fileOrdinal = 0;
168751
- for (let partIndex = 0;partIndex < message.parts.length; partIndex += 1) {
168752
- const part = message.parts[partIndex];
168753
- if (isReduceToolPart(part)) {
168754
- lastReduceMessageIndex = msgIndex;
168755
- }
168756
- const toolObservation = extractToolCallObservation(part);
168757
- if (toolObservation) {
168758
- const entry = toolCallIndex.get(toolObservation.callId) ?? {
168759
- occurrences: [],
168760
- hasResult: false
168761
- };
168762
- entry.occurrences.push({ message, part, kind: toolObservation.kind });
168763
- if (toolObservation.kind === "result")
168764
- entry.hasResult = true;
168765
- toolCallIndex.set(toolObservation.callId, entry);
168766
- const existingTagId = tagger.getTag(sessionId, toolObservation.callId);
168767
- if (existingTagId !== undefined) {
168768
- toolTagByCallId.set(toolObservation.callId, existingTagId);
168769
- messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, existingTagId));
168770
- if (message.info.role === "tool" && precedingThinkingParts.length > 0 && !toolThinkingByCallId.has(toolObservation.callId)) {
168771
- toolThinkingByCallId.set(toolObservation.callId, precedingThinkingParts);
168772
- }
168805
+ for (let msgIndex = 0;msgIndex < messages.length; msgIndex++) {
168806
+ const message = messages[msgIndex];
168807
+ const messageId = typeof message.info.id === "string" ? message.info.id : null;
168808
+ if (message.info.role === "user") {
168809
+ precedingThinkingParts = [];
168810
+ }
168811
+ const messageThinkingParts = message.parts.filter(isThinkingPart);
168812
+ if (messageThinkingParts.length > 0) {
168813
+ reasoningByMessage.set(message, messageThinkingParts);
168814
+ }
168815
+ const messageHasTextPart = message.parts.some(isTextPart);
168816
+ let textOrdinal = 0;
168817
+ let fileOrdinal = 0;
168818
+ for (let partIndex = 0;partIndex < message.parts.length; partIndex += 1) {
168819
+ const part = message.parts[partIndex];
168820
+ if (isReduceToolPart(part)) {
168821
+ lastReduceMessageIndex = msgIndex;
168822
+ }
168823
+ const toolObservation = extractToolCallObservation(part);
168824
+ if (toolObservation) {
168825
+ const entry = toolCallIndex.get(toolObservation.callId) ?? {
168826
+ occurrences: [],
168827
+ hasResult: false
168828
+ };
168829
+ entry.occurrences.push({ message, part, kind: toolObservation.kind });
168830
+ if (toolObservation.kind === "result")
168831
+ entry.hasResult = true;
168832
+ toolCallIndex.set(toolObservation.callId, entry);
168833
+ const existingTagId = tagger.getTag(sessionId, toolObservation.callId);
168834
+ if (existingTagId !== undefined) {
168835
+ toolTagByCallId.set(toolObservation.callId, existingTagId);
168836
+ messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, existingTagId));
168837
+ if (message.info.role === "tool" && precedingThinkingParts.length > 0 && !toolThinkingByCallId.has(toolObservation.callId)) {
168838
+ toolThinkingByCallId.set(toolObservation.callId, precedingThinkingParts);
168773
168839
  }
168774
168840
  }
168775
- if (messageId && isTextPart(part)) {
168776
- const textPart = part;
168777
- const thinkingParts = messageThinkingParts;
168778
- const contentId = `${messageId}:p${partIndex}`;
168779
- const existingTagId = resolver.resolve(messageId, "message", contentId, textOrdinal);
168780
- const reasoningBytes = textOrdinal === 0 ? getReasoningByteSize(thinkingParts) : 0;
168781
- const tagId = tagger.assignTag(sessionId, contentId, "message", byteSize(textPart.text), db, reasoningBytes);
168782
- if (existingTagId === undefined) {
168783
- const sourceContent = stripTagPrefix(textPart.text);
168784
- if (sourceContent.trim().length > 0) {
168785
- saveSourceContent(db, sessionId, tagId, sourceContent);
168786
- }
168787
- } else {
168788
- const sourceContent = sourceContents.get(tagId);
168789
- if (sourceContent !== undefined) {
168790
- textPart.text = sourceContent;
168791
- }
168792
- }
168793
- messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168794
- if (!skipPrefixInjection) {
168795
- textPart.text = prependTag(tagId, textPart.text);
168841
+ }
168842
+ if (messageId && isTextPart(part)) {
168843
+ const textPart = part;
168844
+ const thinkingParts = messageThinkingParts;
168845
+ const contentId = `${messageId}:p${partIndex}`;
168846
+ resolver.resolve(messageId, "message", contentId, textOrdinal);
168847
+ const reasoningBytes = textOrdinal === 0 ? getReasoningByteSize(thinkingParts) : 0;
168848
+ const tagId = tagger.assignTag(sessionId, contentId, "message", byteSize(textPart.text), db, reasoningBytes);
168849
+ const persistedSource = sourceContents.get(tagId);
168850
+ if (persistedSource !== undefined) {
168851
+ textPart.text = persistedSource;
168852
+ } else {
168853
+ const sourceContent = stripTagPrefix(textPart.text);
168854
+ if (sourceContent.trim().length > 0) {
168855
+ saveSourceContent(db, sessionId, tagId, sourceContent);
168796
168856
  }
168797
- targets.set(tagId, {
168798
- message,
168799
- setContent: (content) => {
168800
- if (textPart.text === content)
168801
- return false;
168802
- textPart.text = content;
168803
- for (const tp of thinkingParts) {
168804
- if (tp.thinking !== undefined)
168805
- tp.thinking = "[cleared]";
168806
- if (tp.text !== undefined)
168807
- tp.text = "[cleared]";
168808
- }
168809
- return true;
168810
- },
168811
- getContent: () => textPart.text
168812
- });
168813
- textOrdinal += 1;
168814
- continue;
168815
168857
  }
168816
- if (isToolPartWithOutput(part)) {
168817
- const toolPart = part;
168818
- const thinkingParts = precedingThinkingParts;
168819
- const reasoningBytes = getReasoningByteSize(thinkingParts);
168820
- const { toolName, inputByteSize } = extractToolTagMetadata(toolPart);
168821
- const tagId = tagger.assignTag(sessionId, toolPart.callID, "tool", byteSize(toolPart.state.output), db, reasoningBytes, toolName, inputByteSize);
168822
- messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168823
- if (!skipPrefixInjection) {
168824
- toolPart.state.output = prependTag(tagId, toolPart.state.output);
168825
- }
168826
- toolTagByCallId.set(toolPart.callID, tagId);
168827
- if (thinkingParts.length > 0 && !toolThinkingByCallId.has(toolPart.callID)) {
168828
- toolThinkingByCallId.set(toolPart.callID, thinkingParts);
168829
- }
168858
+ messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168859
+ if (!skipPrefixInjection) {
168860
+ textPart.text = prependTag(tagId, textPart.text);
168830
168861
  }
168831
- if (messageId && isFilePart(part)) {
168832
- const filePart = part;
168833
- const messageParts = message.parts;
168834
- const contentId = `${messageId}:file${partIndex}`;
168835
- const existingTagId = resolver.resolve(messageId, "file", contentId, fileOrdinal);
168836
- const tagId = tagger.assignTag(sessionId, contentId, "file", byteSize(filePart.url), db);
168837
- if (existingTagId === undefined) {
168838
- const sourceContent = buildFileSourceContent(message.parts);
168839
- if (sourceContent) {
168840
- saveSourceContent(db, sessionId, tagId, sourceContent);
168841
- }
168842
- }
168843
- messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168844
- targets.set(tagId, {
168845
- message,
168846
- setContent: (content) => {
168847
- const prev = messageParts[partIndex];
168848
- const prevText = typeof prev === "object" && prev !== null && "text" in prev ? prev.text : "";
168849
- if (prevText === content)
168850
- return false;
168851
- messageParts[partIndex] = {
168852
- type: "text",
168853
- text: content
168854
- };
168855
- return true;
168862
+ targets.set(tagId, {
168863
+ message,
168864
+ setContent: (content) => {
168865
+ if (textPart.text === content)
168866
+ return false;
168867
+ textPart.text = content;
168868
+ for (const tp of thinkingParts) {
168869
+ if (tp.thinking !== undefined)
168870
+ tp.thinking = "[cleared]";
168871
+ if (tp.text !== undefined)
168872
+ tp.text = "[cleared]";
168856
168873
  }
168857
- });
168858
- fileOrdinal += 1;
168874
+ return true;
168875
+ },
168876
+ getContent: () => textPart.text
168877
+ });
168878
+ textOrdinal += 1;
168879
+ continue;
168880
+ }
168881
+ if (isToolPartWithOutput(part)) {
168882
+ const toolPart = part;
168883
+ const thinkingParts = precedingThinkingParts;
168884
+ const reasoningBytes = getReasoningByteSize(thinkingParts);
168885
+ const { toolName, inputByteSize } = extractToolTagMetadata(toolPart);
168886
+ const tagId = tagger.assignTag(sessionId, toolPart.callID, "tool", byteSize(toolPart.state.output), db, reasoningBytes, toolName, inputByteSize);
168887
+ messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168888
+ if (!skipPrefixInjection) {
168889
+ toolPart.state.output = prependTag(tagId, toolPart.state.output);
168890
+ }
168891
+ toolTagByCallId.set(toolPart.callID, tagId);
168892
+ if (thinkingParts.length > 0 && !toolThinkingByCallId.has(toolPart.callID)) {
168893
+ toolThinkingByCallId.set(toolPart.callID, thinkingParts);
168859
168894
  }
168860
168895
  }
168861
- if (message.info.role === "assistant" && !messageHasTextPart) {
168862
- precedingThinkingParts = messageThinkingParts;
168896
+ if (messageId && isFilePart(part)) {
168897
+ const filePart = part;
168898
+ const messageParts = message.parts;
168899
+ const contentId = `${messageId}:file${partIndex}`;
168900
+ const existingTagId = resolver.resolve(messageId, "file", contentId, fileOrdinal);
168901
+ const tagId = tagger.assignTag(sessionId, contentId, "file", byteSize(filePart.url), db);
168902
+ if (existingTagId === undefined) {
168903
+ const sourceContent = buildFileSourceContent(message.parts);
168904
+ if (sourceContent) {
168905
+ saveSourceContent(db, sessionId, tagId, sourceContent);
168906
+ }
168907
+ }
168908
+ messageTagNumbers.set(message, Math.max(messageTagNumbers.get(message) ?? 0, tagId));
168909
+ targets.set(tagId, {
168910
+ message,
168911
+ setContent: (content) => {
168912
+ const prev = messageParts[partIndex];
168913
+ const prevText = typeof prev === "object" && prev !== null && "text" in prev ? prev.text : "";
168914
+ if (prevText === content)
168915
+ return false;
168916
+ messageParts[partIndex] = {
168917
+ type: "text",
168918
+ text: content
168919
+ };
168920
+ return true;
168921
+ }
168922
+ });
168923
+ fileOrdinal += 1;
168863
168924
  }
168864
- if (!commitDetected && message.info.role === "assistant" && messages.length - msgIndex <= COMMIT_LOOKBACK) {
168865
- for (const part of message.parts) {
168866
- if (isTextPart(part)) {
168867
- const text = part.text;
168868
- if (COMMIT_HASH_PATTERN2.test(text) && /\b(commit|committed|cherry-pick|merge|rebas)/i.test(text)) {
168869
- commitDetected = true;
168870
- break;
168871
- }
168925
+ }
168926
+ if (message.info.role === "assistant" && !messageHasTextPart) {
168927
+ precedingThinkingParts = messageThinkingParts;
168928
+ }
168929
+ if (!commitDetected && message.info.role === "assistant" && messages.length - msgIndex <= COMMIT_LOOKBACK) {
168930
+ for (const part of message.parts) {
168931
+ if (isTextPart(part)) {
168932
+ const text = part.text;
168933
+ if (COMMIT_HASH_PATTERN2.test(text) && /\b(commit|committed|cherry-pick|merge|rebas)/i.test(text)) {
168934
+ commitDetected = true;
168935
+ break;
168872
168936
  }
168873
168937
  }
168874
168938
  }
168875
168939
  }
168876
- })();
168940
+ }
168877
168941
  for (const [callId, tagId] of toolTagByCallId) {
168878
168942
  const thinkingParts = toolThinkingByCallId.get(callId) ?? [];
168879
168943
  targets.set(tagId, createToolDropTarget(callId, thinkingParts, toolCallIndex, batch));
@@ -170390,6 +170454,7 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so ma
170390
170454
  }
170391
170455
  logTransformTiming(sessionId, "injectTemporalMarkers", tTemporal);
170392
170456
  }
170457
+ let taggingSucceeded = false;
170393
170458
  try {
170394
170459
  const t0 = performance.now();
170395
170460
  deps.tagger.initFromDb(sessionId, db);
@@ -170410,23 +170475,31 @@ Historian previously failed ${historianFailureState.failureCount} time(s), so ma
170410
170475
  }
170411
170476
  deps.commitSeenLastPass?.set(sessionId, result.hasRecentCommit);
170412
170477
  logTransformTiming(sessionId, "tagMessages", t0);
170478
+ taggingSucceeded = true;
170413
170479
  } catch (error48) {
170414
170480
  sessionLog(sessionId, "transform tag persistence failed; continuing without tagging:", error48);
170481
+ try {
170482
+ deps.tagger.cleanup(sessionId);
170483
+ } catch (cleanupError) {
170484
+ sessionLog(sessionId, "tagger cleanup after failure threw:", cleanupError);
170485
+ }
170415
170486
  }
170416
170487
  const t1 = performance.now();
170417
170488
  const tags = getTagsBySession(db, sessionId);
170418
170489
  logTransformTiming(sessionId, "getTagsBySession", t1, `count=${tags.length}`);
170419
170490
  let didMutateFromFlushedStatuses = false;
170420
- try {
170421
- const t2 = performance.now();
170422
- didMutateFromFlushedStatuses = applyFlushedStatuses(sessionId, db, targets, tags);
170423
- logTransformTiming(sessionId, "applyFlushedStatuses", t2);
170424
- batch?.finalize();
170425
- logTransformTiming(sessionId, "batchFinalize:flushed", t2);
170426
- } catch (error48) {
170427
- sessionLog(sessionId, "transform failed applying flushed statuses:", error48);
170428
- if (isCacheBusting)
170429
- deps.nudgePlacements.clear(sessionId);
170491
+ if (taggingSucceeded) {
170492
+ try {
170493
+ const t2 = performance.now();
170494
+ didMutateFromFlushedStatuses = applyFlushedStatuses(sessionId, db, targets, tags);
170495
+ logTransformTiming(sessionId, "applyFlushedStatuses", t2);
170496
+ batch?.finalize();
170497
+ logTransformTiming(sessionId, "batchFinalize:flushed", t2);
170498
+ } catch (error48) {
170499
+ sessionLog(sessionId, "transform failed applying flushed statuses:", error48);
170500
+ if (isCacheBusting)
170501
+ deps.nudgePlacements.clear(sessionId);
170502
+ }
170430
170503
  }
170431
170504
  if (didMutateFromFlushedStatuses && isCacheBusting) {
170432
170505
  deps.nudgePlacements.clear(sessionId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/opencode-magic-context",
3
- "version": "0.15.6",
3
+ "version": "0.15.7",
4
4
  "type": "module",
5
5
  "description": "OpenCode plugin for Magic Context — cross-session memory and context management",
6
6
  "main": "dist/index.js",