@dzhechkov/harness-core 0.3.104 → 0.3.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/recall-hook-policy.d.ts +2 -0
- package/dist/recall-hook-policy.d.ts.map +1 -1
- package/dist/recall-hook-policy.js +1 -0
- package/dist/recall-hook-policy.js.map +1 -1
- package/dist/recall-usage.d.ts +82 -0
- package/dist/recall-usage.d.ts.map +1 -0
- package/dist/recall-usage.js +283 -0
- package/dist/recall-usage.js.map +1 -0
- package/dist/statusline.d.ts +2 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +23 -0
- package/dist/statusline.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +21 -0
- package/src/recall-hook-policy.ts +3 -0
- package/src/recall-usage.ts +373 -0
- package/src/statusline.ts +23 -0
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,8 @@ export { step8ClaimGate } from './feature-adr-claim-gate.js';
|
|
|
53
53
|
export type { Step8ClaimCounts, Step8ClaimGate } from './feature-adr-claim-gate.js';
|
|
54
54
|
export { detectQueryLang, relevanceFloorFor, selectHookHits, renderHookContext, hasEnoughSignal, DEFAULT_RECALL_FLOORS, DEFAULT_RECALL_HOOK_LIMIT, DEFAULT_RECALL_HOOK_BUDGET_CHARS, MIN_PROMPT_CHARS, MIN_CONTENT_TOKENS, } from './recall-hook-policy.js';
|
|
55
55
|
export type { QueryLang, RecallFloors, HookCandidate, HookSelection } from './recall-hook-policy.js';
|
|
56
|
+
export { RECALL_USAGE_LOG_RELATIVE, RECALL_USAGE_LOG_MAX_BYTES, RECALL_USAGE_COMPACT_TARGET_BYTES, formatRecallUsageRecord, parseRecallUsageLog, aggregateRecallUsage, buildRecallUsageReport, shouldCompactRecallUsageLogSize, compactRecallUsageLog, } from './recall-usage.js';
|
|
57
|
+
export type { RecallUsageReadRecord, RecallUsageAggregateRecord, RecallUsageRecord, ParsedRecallUsageLog, RecallUsageStat, RecallPatternUsageRef, RecallUsagePatternRow, RecallUsageReport, } from './recall-usage.js';
|
|
56
58
|
export { discoverPackages, publishPackages, bumpPatch, compareVersions, findUnpackagedSkills, orderByDependencies, syncReadmeVersion } from './publish.js';
|
|
57
59
|
export { fetchAllDownloads } from './downloads.js';
|
|
58
60
|
export type { PackageDownloads, DownloadsReport } from './downloads.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,EAAE,MACiD,CAAC;AAErF,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1H,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,SAAS,EAAE,aAAa,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnf,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/T,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACtK,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9K,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC3H,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjH,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChO,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvN,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3J,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACzE,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -33,6 +33,7 @@ export { claimCheck, summarize } from './claim-check.js';
|
|
|
33
33
|
export { hookDecision, isFenced, isNewLine, ESCAPE_TEACHING } from './claim-check-hook-policy.js';
|
|
34
34
|
export { step8ClaimGate } from './feature-adr-claim-gate.js';
|
|
35
35
|
export { detectQueryLang, relevanceFloorFor, selectHookHits, renderHookContext, hasEnoughSignal, DEFAULT_RECALL_FLOORS, DEFAULT_RECALL_HOOK_LIMIT, DEFAULT_RECALL_HOOK_BUDGET_CHARS, MIN_PROMPT_CHARS, MIN_CONTENT_TOKENS, } from './recall-hook-policy.js';
|
|
36
|
+
export { RECALL_USAGE_LOG_RELATIVE, RECALL_USAGE_LOG_MAX_BYTES, RECALL_USAGE_COMPACT_TARGET_BYTES, formatRecallUsageRecord, parseRecallUsageLog, aggregateRecallUsage, buildRecallUsageReport, shouldCompactRecallUsageLogSize, compactRecallUsageLog, } from './recall-usage.js';
|
|
36
37
|
export { discoverPackages, publishPackages, bumpPatch, compareVersions, findUnpackagedSkills, orderByDependencies, syncReadmeVersion } from './publish.js';
|
|
37
38
|
export { fetchAllDownloads } from './downloads.js';
|
|
38
39
|
export { discoverInstalled, checkUpgrades } from './upgrade.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,8 @@ export declare const MIN_CONTENT_TOKENS = 2;
|
|
|
69
69
|
export declare function hasEnoughSignal(text: unknown): boolean;
|
|
70
70
|
/** One ranked candidate from the recall engine. `score` is the relevance in `[0,1]`, NOT the reward. */
|
|
71
71
|
export interface HookCandidate {
|
|
72
|
+
/** Stable dz store id (`metadata.dzId` in the vector mirror), used only for usage accounting. */
|
|
73
|
+
readonly dzId?: string;
|
|
72
74
|
readonly pattern: string;
|
|
73
75
|
readonly score: number;
|
|
74
76
|
readonly domain?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall-hook-policy.d.ts","sourceRoot":"","sources":["../src/recall-hook-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAqC,CAAC;AAE1E,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,qHAAqH;AACrH,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAIrD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAGxD;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,MAAM,CAKlG;AAED,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAMtD;AAED,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAClF,aAAa,
|
|
1
|
+
{"version":3,"file":"recall-hook-policy.d.ts","sourceRoot":"","sources":["../src/recall-hook-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAqC,CAAC;AAE1E,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,qHAAqH;AACrH,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAIrD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAGxD;AAED,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,MAAM,CAKlG;AAED,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAMtD;AAED,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC5B,iGAAiG;IACjG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,EACvD,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAClF,aAAa,CAmCf;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAIlE"}
|
|
@@ -94,6 +94,7 @@ export function selectHookHits(prompt, candidates, opts = {}) {
|
|
|
94
94
|
const clean = (candidates ?? [])
|
|
95
95
|
.filter((c) => c !== null &&
|
|
96
96
|
typeof c === 'object' &&
|
|
97
|
+
(c.dzId === undefined || typeof c.dzId === 'string') &&
|
|
97
98
|
typeof c.pattern === 'string' &&
|
|
98
99
|
c.pattern.trim() !== '' &&
|
|
99
100
|
typeof c.score === 'number' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall-hook-policy.js","sourceRoot":"","sources":["../src/recall-hook-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAWH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAE1E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,qHAAqH;AACrH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAErD,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,MAAyC;IACxF,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,GAAG,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,IAAI,kBAAkB,CAAC;AAC7C,CAAC;
|
|
1
|
+
{"version":3,"file":"recall-hook-policy.js","sourceRoot":"","sources":["../src/recall-hook-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure recall-usage accounting for the dz APPLY leg.
|
|
3
|
+
*
|
|
4
|
+
* The live hook writes one JSONL event when a learned pattern is actually injected into a prompt.
|
|
5
|
+
* This module parses that append-only log, folds it into per-pattern usage stats, and compacts it
|
|
6
|
+
* into aggregate JSONL rows when it crosses a bounded size. It deliberately knows nothing about the
|
|
7
|
+
* filesystem; callers own reads/writes so the hook and statusline can keep their never-block rules.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export declare const RECALL_USAGE_LOG_RELATIVE = ".dz/recall-usage.jsonl";
|
|
12
|
+
export declare const RECALL_USAGE_LOG_MAX_BYTES = 1048576;
|
|
13
|
+
export declare const RECALL_USAGE_COMPACT_TARGET_BYTES: number;
|
|
14
|
+
export interface RecallUsageReadRecord {
|
|
15
|
+
readonly dzId: string;
|
|
16
|
+
readonly score: number;
|
|
17
|
+
readonly ts: string;
|
|
18
|
+
}
|
|
19
|
+
export interface RecallUsageAggregateRecord {
|
|
20
|
+
readonly kind: 'aggregate';
|
|
21
|
+
readonly dzId: string;
|
|
22
|
+
readonly reads: number;
|
|
23
|
+
readonly firstReadAt: string;
|
|
24
|
+
readonly lastReadAt: string;
|
|
25
|
+
readonly maxScore: number;
|
|
26
|
+
readonly totalScore: number;
|
|
27
|
+
readonly compactedAt: string;
|
|
28
|
+
}
|
|
29
|
+
export type RecallUsageRecord = RecallUsageReadRecord | RecallUsageAggregateRecord;
|
|
30
|
+
export interface ParsedRecallUsageLog {
|
|
31
|
+
readonly records: readonly RecallUsageRecord[];
|
|
32
|
+
readonly validLines: number;
|
|
33
|
+
readonly invalidLines: number;
|
|
34
|
+
}
|
|
35
|
+
export interface RecallUsageStat {
|
|
36
|
+
readonly dzId: string;
|
|
37
|
+
readonly reads: number;
|
|
38
|
+
readonly firstReadAt: string;
|
|
39
|
+
readonly lastReadAt: string;
|
|
40
|
+
readonly maxScore: number;
|
|
41
|
+
readonly avgScore: number;
|
|
42
|
+
}
|
|
43
|
+
export interface RecallPatternUsageRef {
|
|
44
|
+
readonly dzId: string;
|
|
45
|
+
readonly pattern: string;
|
|
46
|
+
readonly domain?: string;
|
|
47
|
+
readonly reward?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface RecallUsagePatternRow extends RecallPatternUsageRef {
|
|
50
|
+
readonly reads: number;
|
|
51
|
+
readonly firstReadAt?: string;
|
|
52
|
+
readonly lastReadAt?: string;
|
|
53
|
+
readonly maxScore?: number;
|
|
54
|
+
readonly avgScore?: number;
|
|
55
|
+
}
|
|
56
|
+
export interface RecallUsageReport {
|
|
57
|
+
readonly totalPatterns: number;
|
|
58
|
+
readonly usedPatterns: number;
|
|
59
|
+
readonly neverReadPatterns: number;
|
|
60
|
+
readonly totalReads: number;
|
|
61
|
+
readonly unknownReadPatterns: number;
|
|
62
|
+
readonly invalidLines: number;
|
|
63
|
+
readonly top: readonly RecallUsagePatternRow[];
|
|
64
|
+
readonly neverRead: readonly RecallUsagePatternRow[];
|
|
65
|
+
readonly unknown: readonly RecallUsageStat[];
|
|
66
|
+
readonly all: readonly RecallUsagePatternRow[];
|
|
67
|
+
}
|
|
68
|
+
export declare function formatRecallUsageRecord(input: {
|
|
69
|
+
readonly dzId?: unknown;
|
|
70
|
+
readonly score?: unknown;
|
|
71
|
+
readonly ts?: unknown;
|
|
72
|
+
}): string | undefined;
|
|
73
|
+
export declare function parseRecallUsageLog(text: string): ParsedRecallUsageLog;
|
|
74
|
+
export declare function aggregateRecallUsage(records: readonly RecallUsageRecord[]): readonly RecallUsageStat[];
|
|
75
|
+
export declare function buildRecallUsageReport(patterns: readonly RecallPatternUsageRef[], parsed: ParsedRecallUsageLog): RecallUsageReport;
|
|
76
|
+
export declare function shouldCompactRecallUsageLogSize(sizeBytes: number, maxBytes?: number): boolean;
|
|
77
|
+
export declare function compactRecallUsageLog(text: string, opts?: {
|
|
78
|
+
readonly maxBytes?: number;
|
|
79
|
+
readonly targetBytes?: number;
|
|
80
|
+
readonly compactedAt?: string;
|
|
81
|
+
}): string;
|
|
82
|
+
//# sourceMappingURL=recall-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall-usage.d.ts","sourceRoot":"","sources":["../src/recall-usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure recall-usage accounting for the dz APPLY leg.
|
|
3
|
+
*
|
|
4
|
+
* The live hook writes one JSONL event when a learned pattern is actually injected into a prompt.
|
|
5
|
+
* This module parses that append-only log, folds it into per-pattern usage stats, and compacts it
|
|
6
|
+
* into aggregate JSONL rows when it crosses a bounded size. It deliberately knows nothing about the
|
|
7
|
+
* filesystem; callers own reads/writes so the hook and statusline can keep their never-block rules.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export const RECALL_USAGE_LOG_RELATIVE = '.dz/recall-usage.jsonl';
|
|
12
|
+
export const RECALL_USAGE_LOG_MAX_BYTES = 1_048_576;
|
|
13
|
+
export const RECALL_USAGE_COMPACT_TARGET_BYTES = Math.floor(RECALL_USAGE_LOG_MAX_BYTES * 0.75);
|
|
14
|
+
export function formatRecallUsageRecord(input) {
|
|
15
|
+
const rec = normalizeReadRecord(input);
|
|
16
|
+
return rec === undefined ? undefined : `${JSON.stringify(rec)}\n`;
|
|
17
|
+
}
|
|
18
|
+
export function parseRecallUsageLog(text) {
|
|
19
|
+
const records = [];
|
|
20
|
+
let invalidLines = 0;
|
|
21
|
+
for (const line of text.split('\n')) {
|
|
22
|
+
const trimmed = line.trim();
|
|
23
|
+
if (trimmed === '')
|
|
24
|
+
continue;
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(trimmed);
|
|
27
|
+
const record = normalizeRecord(parsed);
|
|
28
|
+
if (record === undefined) {
|
|
29
|
+
invalidLines += 1;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
records.push(record);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
invalidLines += 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { records, validLines: records.length, invalidLines };
|
|
40
|
+
}
|
|
41
|
+
export function aggregateRecallUsage(records) {
|
|
42
|
+
const byId = new Map();
|
|
43
|
+
for (const rec of records) {
|
|
44
|
+
if (isAggregate(rec)) {
|
|
45
|
+
mergeAggregate(byId, rec);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
mergeRead(byId, rec);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return [...byId.values()]
|
|
52
|
+
.map((a) => ({
|
|
53
|
+
dzId: a.dzId,
|
|
54
|
+
reads: a.reads,
|
|
55
|
+
firstReadAt: a.firstReadAt,
|
|
56
|
+
lastReadAt: a.lastReadAt,
|
|
57
|
+
maxScore: a.maxScore,
|
|
58
|
+
avgScore: a.totalScore / a.reads,
|
|
59
|
+
}))
|
|
60
|
+
.sort(compareStats);
|
|
61
|
+
}
|
|
62
|
+
export function buildRecallUsageReport(patterns, parsed) {
|
|
63
|
+
const stats = aggregateRecallUsage(parsed.records);
|
|
64
|
+
const statsById = new Map(stats.map((s) => [s.dzId, s]));
|
|
65
|
+
const patternIds = new Set();
|
|
66
|
+
const all = [];
|
|
67
|
+
for (const p of patterns) {
|
|
68
|
+
if (p.dzId.trim() === '')
|
|
69
|
+
continue;
|
|
70
|
+
if (patternIds.has(p.dzId))
|
|
71
|
+
continue;
|
|
72
|
+
patternIds.add(p.dzId);
|
|
73
|
+
const stat = statsById.get(p.dzId);
|
|
74
|
+
const base = patternRef(p);
|
|
75
|
+
if (stat === undefined) {
|
|
76
|
+
all.push({ ...base, reads: 0 });
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
all.push({
|
|
80
|
+
...base,
|
|
81
|
+
reads: stat.reads,
|
|
82
|
+
firstReadAt: stat.firstReadAt,
|
|
83
|
+
lastReadAt: stat.lastReadAt,
|
|
84
|
+
maxScore: stat.maxScore,
|
|
85
|
+
avgScore: stat.avgScore,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const top = all.filter((r) => r.reads > 0).sort(compareRows);
|
|
90
|
+
const neverRead = all.filter((r) => r.reads === 0).sort((a, b) => a.dzId.localeCompare(b.dzId));
|
|
91
|
+
const unknown = stats.filter((s) => !patternIds.has(s.dzId)).sort(compareStats);
|
|
92
|
+
return {
|
|
93
|
+
totalPatterns: all.length,
|
|
94
|
+
usedPatterns: top.length,
|
|
95
|
+
neverReadPatterns: neverRead.length,
|
|
96
|
+
totalReads: stats.reduce((sum, s) => sum + s.reads, 0),
|
|
97
|
+
unknownReadPatterns: unknown.length,
|
|
98
|
+
invalidLines: parsed.invalidLines,
|
|
99
|
+
top,
|
|
100
|
+
neverRead,
|
|
101
|
+
unknown,
|
|
102
|
+
all: all.sort(compareRows),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export function shouldCompactRecallUsageLogSize(sizeBytes, maxBytes = RECALL_USAGE_LOG_MAX_BYTES) {
|
|
106
|
+
return Number.isFinite(sizeBytes) && sizeBytes > validMax(maxBytes);
|
|
107
|
+
}
|
|
108
|
+
export function compactRecallUsageLog(text, opts = {}) {
|
|
109
|
+
const maxBytes = validMax(opts.maxBytes ?? RECALL_USAGE_LOG_MAX_BYTES);
|
|
110
|
+
const targetBytes = validTarget(opts.targetBytes ?? Math.floor(maxBytes * 0.75), maxBytes);
|
|
111
|
+
const compactedAt = validTs(opts.compactedAt) ? opts.compactedAt : new Date(0).toISOString();
|
|
112
|
+
const stats = aggregateRecallUsage(parseRecallUsageLog(text).records);
|
|
113
|
+
const lines = stats.map((s) => aggregateLine(s, compactedAt));
|
|
114
|
+
let out = joinLines(lines);
|
|
115
|
+
if (byteLength(out) <= maxBytes)
|
|
116
|
+
return out;
|
|
117
|
+
const kept = [];
|
|
118
|
+
let used = 0;
|
|
119
|
+
for (const line of lines) {
|
|
120
|
+
const cost = byteLength(`${line}\n`);
|
|
121
|
+
if (kept.length > 0 && used + cost > targetBytes)
|
|
122
|
+
continue;
|
|
123
|
+
if (cost > maxBytes)
|
|
124
|
+
continue;
|
|
125
|
+
if (used + cost <= maxBytes) {
|
|
126
|
+
kept.push(line);
|
|
127
|
+
used += cost;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
out = joinLines(kept);
|
|
131
|
+
return byteLength(out) <= maxBytes ? out : '';
|
|
132
|
+
}
|
|
133
|
+
function normalizeRecord(value) {
|
|
134
|
+
if (!isRecord(value))
|
|
135
|
+
return undefined;
|
|
136
|
+
if (value['kind'] === 'aggregate')
|
|
137
|
+
return normalizeAggregateRecord(value);
|
|
138
|
+
return normalizeReadRecord(value);
|
|
139
|
+
}
|
|
140
|
+
function normalizeReadRecord(value) {
|
|
141
|
+
if (!isRecord(value))
|
|
142
|
+
return undefined;
|
|
143
|
+
const dzId = value['dzId'];
|
|
144
|
+
const score = value['score'];
|
|
145
|
+
const ts = value['ts'];
|
|
146
|
+
if (typeof dzId !== 'string' || dzId.trim() === '')
|
|
147
|
+
return undefined;
|
|
148
|
+
if (typeof score !== 'number' || !Number.isFinite(score))
|
|
149
|
+
return undefined;
|
|
150
|
+
if (!validTs(ts))
|
|
151
|
+
return undefined;
|
|
152
|
+
return { dzId: dzId.trim(), score, ts };
|
|
153
|
+
}
|
|
154
|
+
function normalizeAggregateRecord(value) {
|
|
155
|
+
const dzId = value['dzId'];
|
|
156
|
+
const reads = value['reads'];
|
|
157
|
+
const firstReadAt = value['firstReadAt'];
|
|
158
|
+
const lastReadAt = value['lastReadAt'];
|
|
159
|
+
const maxScore = value['maxScore'];
|
|
160
|
+
const totalScore = value['totalScore'];
|
|
161
|
+
const compactedAt = value['compactedAt'];
|
|
162
|
+
if (typeof dzId !== 'string' || dzId.trim() === '')
|
|
163
|
+
return undefined;
|
|
164
|
+
if (typeof reads !== 'number' || !Number.isInteger(reads) || reads <= 0)
|
|
165
|
+
return undefined;
|
|
166
|
+
if (!validTs(firstReadAt) || !validTs(lastReadAt) || !validTs(compactedAt))
|
|
167
|
+
return undefined;
|
|
168
|
+
if (typeof maxScore !== 'number' || !Number.isFinite(maxScore))
|
|
169
|
+
return undefined;
|
|
170
|
+
if (typeof totalScore !== 'number' || !Number.isFinite(totalScore))
|
|
171
|
+
return undefined;
|
|
172
|
+
return { kind: 'aggregate', dzId: dzId.trim(), reads, firstReadAt, lastReadAt, maxScore, totalScore, compactedAt };
|
|
173
|
+
}
|
|
174
|
+
function mergeRead(byId, rec) {
|
|
175
|
+
const ms = Date.parse(rec.ts);
|
|
176
|
+
const prev = byId.get(rec.dzId);
|
|
177
|
+
if (prev === undefined) {
|
|
178
|
+
byId.set(rec.dzId, {
|
|
179
|
+
dzId: rec.dzId,
|
|
180
|
+
reads: 1,
|
|
181
|
+
firstReadAt: rec.ts,
|
|
182
|
+
firstMs: ms,
|
|
183
|
+
lastReadAt: rec.ts,
|
|
184
|
+
lastMs: ms,
|
|
185
|
+
maxScore: rec.score,
|
|
186
|
+
totalScore: rec.score,
|
|
187
|
+
});
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
prev.reads += 1;
|
|
191
|
+
prev.totalScore += rec.score;
|
|
192
|
+
prev.maxScore = Math.max(prev.maxScore, rec.score);
|
|
193
|
+
if (ms < prev.firstMs) {
|
|
194
|
+
prev.firstMs = ms;
|
|
195
|
+
prev.firstReadAt = rec.ts;
|
|
196
|
+
}
|
|
197
|
+
if (ms >= prev.lastMs) {
|
|
198
|
+
prev.lastMs = ms;
|
|
199
|
+
prev.lastReadAt = rec.ts;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function mergeAggregate(byId, rec) {
|
|
203
|
+
const firstMs = Date.parse(rec.firstReadAt);
|
|
204
|
+
const lastMs = Date.parse(rec.lastReadAt);
|
|
205
|
+
const prev = byId.get(rec.dzId);
|
|
206
|
+
if (prev === undefined) {
|
|
207
|
+
byId.set(rec.dzId, {
|
|
208
|
+
dzId: rec.dzId,
|
|
209
|
+
reads: rec.reads,
|
|
210
|
+
firstReadAt: rec.firstReadAt,
|
|
211
|
+
firstMs,
|
|
212
|
+
lastReadAt: rec.lastReadAt,
|
|
213
|
+
lastMs,
|
|
214
|
+
maxScore: rec.maxScore,
|
|
215
|
+
totalScore: rec.totalScore,
|
|
216
|
+
});
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
prev.reads += rec.reads;
|
|
220
|
+
prev.totalScore += rec.totalScore;
|
|
221
|
+
prev.maxScore = Math.max(prev.maxScore, rec.maxScore);
|
|
222
|
+
if (firstMs < prev.firstMs) {
|
|
223
|
+
prev.firstMs = firstMs;
|
|
224
|
+
prev.firstReadAt = rec.firstReadAt;
|
|
225
|
+
}
|
|
226
|
+
if (lastMs >= prev.lastMs) {
|
|
227
|
+
prev.lastMs = lastMs;
|
|
228
|
+
prev.lastReadAt = rec.lastReadAt;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function aggregateLine(stat, compactedAt) {
|
|
232
|
+
const rec = {
|
|
233
|
+
kind: 'aggregate',
|
|
234
|
+
dzId: stat.dzId,
|
|
235
|
+
reads: stat.reads,
|
|
236
|
+
firstReadAt: stat.firstReadAt,
|
|
237
|
+
lastReadAt: stat.lastReadAt,
|
|
238
|
+
maxScore: stat.maxScore,
|
|
239
|
+
totalScore: stat.avgScore * stat.reads,
|
|
240
|
+
compactedAt,
|
|
241
|
+
};
|
|
242
|
+
return JSON.stringify(rec);
|
|
243
|
+
}
|
|
244
|
+
function patternRef(p) {
|
|
245
|
+
return {
|
|
246
|
+
dzId: p.dzId,
|
|
247
|
+
pattern: p.pattern,
|
|
248
|
+
...(p.domain !== undefined ? { domain: p.domain } : {}),
|
|
249
|
+
...(p.reward !== undefined ? { reward: p.reward } : {}),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function compareStats(a, b) {
|
|
253
|
+
return b.reads - a.reads || Date.parse(b.lastReadAt) - Date.parse(a.lastReadAt) || a.dzId.localeCompare(b.dzId);
|
|
254
|
+
}
|
|
255
|
+
function compareRows(a, b) {
|
|
256
|
+
const aLast = a.lastReadAt === undefined ? 0 : Date.parse(a.lastReadAt);
|
|
257
|
+
const bLast = b.lastReadAt === undefined ? 0 : Date.parse(b.lastReadAt);
|
|
258
|
+
return b.reads - a.reads || bLast - aLast || a.dzId.localeCompare(b.dzId);
|
|
259
|
+
}
|
|
260
|
+
function isAggregate(rec) {
|
|
261
|
+
return 'kind' in rec && rec.kind === 'aggregate';
|
|
262
|
+
}
|
|
263
|
+
function isRecord(value) {
|
|
264
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
265
|
+
}
|
|
266
|
+
function validTs(value) {
|
|
267
|
+
return typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Date.parse(value));
|
|
268
|
+
}
|
|
269
|
+
function validMax(value) {
|
|
270
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : RECALL_USAGE_LOG_MAX_BYTES;
|
|
271
|
+
}
|
|
272
|
+
function validTarget(value, maxBytes) {
|
|
273
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
274
|
+
return Math.floor(maxBytes * 0.75);
|
|
275
|
+
return Math.min(Math.floor(value), maxBytes);
|
|
276
|
+
}
|
|
277
|
+
function joinLines(lines) {
|
|
278
|
+
return lines.length === 0 ? '' : `${lines.join('\n')}\n`;
|
|
279
|
+
}
|
|
280
|
+
function byteLength(text) {
|
|
281
|
+
return text.length;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=recall-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall-usage.js","sourceRoot":"","sources":["../src/recall-usage.ts"],"names":[],"mappings":"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"}
|
package/dist/statusline.d.ts
CHANGED
|
@@ -41,6 +41,8 @@ export interface FeatureAdrState {
|
|
|
41
41
|
export interface StatuslineData {
|
|
42
42
|
/** Count of learned patterns in the project's unified memory store. */
|
|
43
43
|
readonly patterns: number;
|
|
44
|
+
/** Count of learned patterns that the live recall hook has actually injected at least once. */
|
|
45
|
+
readonly usedPatterns?: number;
|
|
44
46
|
/** Number of sources registered in the durable cross-project knowledge brain. */
|
|
45
47
|
readonly brainSources: number;
|
|
46
48
|
/** Hours since the last `dz consolidate` run, if a watermark is present. */
|
package/dist/statusline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,uFAAuF;IACvF,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAYD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AA8FD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,eAAe,GAAG,SAAS,CA0B9G;AAED,0FAA0F;AAC1F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,yBAAyB,EAChC,GAAG,GAAE,MAAmB,GACvB,eAAe,GAAG,SAAS,CA0B7B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,cAAc,CAyC5F"}
|
package/dist/statusline.js
CHANGED
|
@@ -17,6 +17,7 @@ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'no
|
|
|
17
17
|
import { dirname, join, resolve } from 'node:path';
|
|
18
18
|
import { createRequire } from 'node:module';
|
|
19
19
|
import { listBrain } from './brain.js';
|
|
20
|
+
import { RECALL_USAGE_LOG_RELATIVE, aggregateRecallUsage, parseRecallUsageLog } from './recall-usage.js';
|
|
20
21
|
/** Path of the SQLite pattern store (the Tier-3 backend). */
|
|
21
22
|
function sqlitePatternPath(projectRoot) {
|
|
22
23
|
return join(projectRoot, '.dz', 'memory', 'patterns.sqlite');
|
|
@@ -90,6 +91,20 @@ function countLearnedPatterns(projectRoot) {
|
|
|
90
91
|
}
|
|
91
92
|
return countJsonlPatternsReadonly(projectRoot);
|
|
92
93
|
}
|
|
94
|
+
function countUsedPatternsReadonly(projectRoot) {
|
|
95
|
+
const path = join(projectRoot, RECALL_USAGE_LOG_RELATIVE);
|
|
96
|
+
if (!existsSync(path))
|
|
97
|
+
return undefined;
|
|
98
|
+
try {
|
|
99
|
+
const parsed = parseRecallUsageLog(readFileSync(path, 'utf-8'));
|
|
100
|
+
if (parsed.records.length === 0)
|
|
101
|
+
return undefined;
|
|
102
|
+
return aggregateRecallUsage(parsed.records).length;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
93
108
|
/** Hours since the last consolidation, or `undefined` when never consolidated / unreadable. */
|
|
94
109
|
function consolidatedAgeHours(projectRoot, now) {
|
|
95
110
|
const path = consolidateWatermarkPath(projectRoot);
|
|
@@ -214,6 +229,13 @@ export function statuslineData(projectRoot, now = Date.now()) {
|
|
|
214
229
|
catch {
|
|
215
230
|
brainSources = 0;
|
|
216
231
|
}
|
|
232
|
+
let usedPatterns;
|
|
233
|
+
try {
|
|
234
|
+
usedPatterns = countUsedPatternsReadonly(root);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
usedPatterns = undefined;
|
|
238
|
+
}
|
|
217
239
|
const ageH = consolidatedAgeHours(root, now);
|
|
218
240
|
// Live /feature-adr panel — attached ONLY when a fresh run is in flight (readonly, never throws).
|
|
219
241
|
let featureAdr;
|
|
@@ -225,6 +247,7 @@ export function statuslineData(projectRoot, now = Date.now()) {
|
|
|
225
247
|
}
|
|
226
248
|
return {
|
|
227
249
|
patterns,
|
|
250
|
+
...(usedPatterns !== undefined ? { usedPatterns } : {}),
|
|
228
251
|
brainSources,
|
|
229
252
|
...(ageH !== undefined ? { consolidatedAgeH: ageH } : {}),
|
|
230
253
|
...(featureAdr !== undefined ? { featureAdr } : {}),
|
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dzhechkov/harness-core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.105",
|
|
4
4
|
"description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"yaml": "^2.0.0",
|
|
33
33
|
"@dzhechkov/adapter-agents-md": "0.1.1",
|
|
34
34
|
"@dzhechkov/adapter-gemini": "0.1.1",
|
|
35
|
+
"@dzhechkov/adapter-copilot": "0.1.1",
|
|
35
36
|
"@dzhechkov/adapter-windsurf": "0.1.1",
|
|
37
|
+
"@dzhechkov/adapter-cursor": "0.1.1",
|
|
36
38
|
"@dzhechkov/core": "0.2.14",
|
|
37
|
-
"@dzhechkov/
|
|
38
|
-
"@dzhechkov/memory": "0.2.9",
|
|
39
|
-
"@dzhechkov/adapter-cursor": "0.1.1"
|
|
39
|
+
"@dzhechkov/memory": "0.2.9"
|
|
40
40
|
},
|
|
41
41
|
"peerDependenciesMeta": {
|
|
42
42
|
"@ruvector/rvf": {
|
package/src/index.ts
CHANGED
|
@@ -138,6 +138,27 @@ export {
|
|
|
138
138
|
MIN_CONTENT_TOKENS,
|
|
139
139
|
} from './recall-hook-policy.js';
|
|
140
140
|
export type { QueryLang, RecallFloors, HookCandidate, HookSelection } from './recall-hook-policy.js';
|
|
141
|
+
export {
|
|
142
|
+
RECALL_USAGE_LOG_RELATIVE,
|
|
143
|
+
RECALL_USAGE_LOG_MAX_BYTES,
|
|
144
|
+
RECALL_USAGE_COMPACT_TARGET_BYTES,
|
|
145
|
+
formatRecallUsageRecord,
|
|
146
|
+
parseRecallUsageLog,
|
|
147
|
+
aggregateRecallUsage,
|
|
148
|
+
buildRecallUsageReport,
|
|
149
|
+
shouldCompactRecallUsageLogSize,
|
|
150
|
+
compactRecallUsageLog,
|
|
151
|
+
} from './recall-usage.js';
|
|
152
|
+
export type {
|
|
153
|
+
RecallUsageReadRecord,
|
|
154
|
+
RecallUsageAggregateRecord,
|
|
155
|
+
RecallUsageRecord,
|
|
156
|
+
ParsedRecallUsageLog,
|
|
157
|
+
RecallUsageStat,
|
|
158
|
+
RecallPatternUsageRef,
|
|
159
|
+
RecallUsagePatternRow,
|
|
160
|
+
RecallUsageReport,
|
|
161
|
+
} from './recall-usage.js';
|
|
141
162
|
export { discoverPackages, publishPackages, bumpPatch, compareVersions, findUnpackagedSkills, orderByDependencies, syncReadmeVersion } from './publish.js';
|
|
142
163
|
export { fetchAllDownloads } from './downloads.js';
|
|
143
164
|
export type { PackageDownloads, DownloadsReport } from './downloads.js';
|
|
@@ -95,6 +95,8 @@ export function hasEnoughSignal(text: unknown): boolean {
|
|
|
95
95
|
|
|
96
96
|
/** One ranked candidate from the recall engine. `score` is the relevance in `[0,1]`, NOT the reward. */
|
|
97
97
|
export interface HookCandidate {
|
|
98
|
+
/** Stable dz store id (`metadata.dzId` in the vector mirror), used only for usage accounting. */
|
|
99
|
+
readonly dzId?: string;
|
|
98
100
|
readonly pattern: string;
|
|
99
101
|
readonly score: number;
|
|
100
102
|
readonly domain?: string;
|
|
@@ -130,6 +132,7 @@ export function selectHookHits(
|
|
|
130
132
|
(c): c is HookCandidate =>
|
|
131
133
|
c !== null &&
|
|
132
134
|
typeof c === 'object' &&
|
|
135
|
+
(c.dzId === undefined || typeof c.dzId === 'string') &&
|
|
133
136
|
typeof c.pattern === 'string' &&
|
|
134
137
|
c.pattern.trim() !== '' &&
|
|
135
138
|
typeof c.score === 'number' &&
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure recall-usage accounting for the dz APPLY leg.
|
|
3
|
+
*
|
|
4
|
+
* The live hook writes one JSONL event when a learned pattern is actually injected into a prompt.
|
|
5
|
+
* This module parses that append-only log, folds it into per-pattern usage stats, and compacts it
|
|
6
|
+
* into aggregate JSONL rows when it crosses a bounded size. It deliberately knows nothing about the
|
|
7
|
+
* filesystem; callers own reads/writes so the hook and statusline can keep their never-block rules.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export const RECALL_USAGE_LOG_RELATIVE = '.dz/recall-usage.jsonl';
|
|
13
|
+
export const RECALL_USAGE_LOG_MAX_BYTES = 1_048_576;
|
|
14
|
+
export const RECALL_USAGE_COMPACT_TARGET_BYTES = Math.floor(RECALL_USAGE_LOG_MAX_BYTES * 0.75);
|
|
15
|
+
|
|
16
|
+
export interface RecallUsageReadRecord {
|
|
17
|
+
readonly dzId: string;
|
|
18
|
+
readonly score: number;
|
|
19
|
+
readonly ts: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface RecallUsageAggregateRecord {
|
|
23
|
+
readonly kind: 'aggregate';
|
|
24
|
+
readonly dzId: string;
|
|
25
|
+
readonly reads: number;
|
|
26
|
+
readonly firstReadAt: string;
|
|
27
|
+
readonly lastReadAt: string;
|
|
28
|
+
readonly maxScore: number;
|
|
29
|
+
readonly totalScore: number;
|
|
30
|
+
readonly compactedAt: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type RecallUsageRecord = RecallUsageReadRecord | RecallUsageAggregateRecord;
|
|
34
|
+
|
|
35
|
+
export interface ParsedRecallUsageLog {
|
|
36
|
+
readonly records: readonly RecallUsageRecord[];
|
|
37
|
+
readonly validLines: number;
|
|
38
|
+
readonly invalidLines: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface RecallUsageStat {
|
|
42
|
+
readonly dzId: string;
|
|
43
|
+
readonly reads: number;
|
|
44
|
+
readonly firstReadAt: string;
|
|
45
|
+
readonly lastReadAt: string;
|
|
46
|
+
readonly maxScore: number;
|
|
47
|
+
readonly avgScore: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface RecallPatternUsageRef {
|
|
51
|
+
readonly dzId: string;
|
|
52
|
+
readonly pattern: string;
|
|
53
|
+
readonly domain?: string;
|
|
54
|
+
readonly reward?: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface RecallUsagePatternRow extends RecallPatternUsageRef {
|
|
58
|
+
readonly reads: number;
|
|
59
|
+
readonly firstReadAt?: string;
|
|
60
|
+
readonly lastReadAt?: string;
|
|
61
|
+
readonly maxScore?: number;
|
|
62
|
+
readonly avgScore?: number;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface RecallUsageReport {
|
|
66
|
+
readonly totalPatterns: number;
|
|
67
|
+
readonly usedPatterns: number;
|
|
68
|
+
readonly neverReadPatterns: number;
|
|
69
|
+
readonly totalReads: number;
|
|
70
|
+
readonly unknownReadPatterns: number;
|
|
71
|
+
readonly invalidLines: number;
|
|
72
|
+
readonly top: readonly RecallUsagePatternRow[];
|
|
73
|
+
readonly neverRead: readonly RecallUsagePatternRow[];
|
|
74
|
+
readonly unknown: readonly RecallUsageStat[];
|
|
75
|
+
readonly all: readonly RecallUsagePatternRow[];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface Acc {
|
|
79
|
+
dzId: string;
|
|
80
|
+
reads: number;
|
|
81
|
+
firstReadAt: string;
|
|
82
|
+
firstMs: number;
|
|
83
|
+
lastReadAt: string;
|
|
84
|
+
lastMs: number;
|
|
85
|
+
maxScore: number;
|
|
86
|
+
totalScore: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function formatRecallUsageRecord(input: {
|
|
90
|
+
readonly dzId?: unknown;
|
|
91
|
+
readonly score?: unknown;
|
|
92
|
+
readonly ts?: unknown;
|
|
93
|
+
}): string | undefined {
|
|
94
|
+
const rec = normalizeReadRecord(input);
|
|
95
|
+
return rec === undefined ? undefined : `${JSON.stringify(rec)}\n`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function parseRecallUsageLog(text: string): ParsedRecallUsageLog {
|
|
99
|
+
const records: RecallUsageRecord[] = [];
|
|
100
|
+
let invalidLines = 0;
|
|
101
|
+
for (const line of text.split('\n')) {
|
|
102
|
+
const trimmed = line.trim();
|
|
103
|
+
if (trimmed === '') continue;
|
|
104
|
+
try {
|
|
105
|
+
const parsed = JSON.parse(trimmed) as unknown;
|
|
106
|
+
const record = normalizeRecord(parsed);
|
|
107
|
+
if (record === undefined) {
|
|
108
|
+
invalidLines += 1;
|
|
109
|
+
} else {
|
|
110
|
+
records.push(record);
|
|
111
|
+
}
|
|
112
|
+
} catch {
|
|
113
|
+
invalidLines += 1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return { records, validLines: records.length, invalidLines };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function aggregateRecallUsage(records: readonly RecallUsageRecord[]): readonly RecallUsageStat[] {
|
|
120
|
+
const byId = new Map<string, Acc>();
|
|
121
|
+
for (const rec of records) {
|
|
122
|
+
if (isAggregate(rec)) {
|
|
123
|
+
mergeAggregate(byId, rec);
|
|
124
|
+
} else {
|
|
125
|
+
mergeRead(byId, rec);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return [...byId.values()]
|
|
129
|
+
.map((a) => ({
|
|
130
|
+
dzId: a.dzId,
|
|
131
|
+
reads: a.reads,
|
|
132
|
+
firstReadAt: a.firstReadAt,
|
|
133
|
+
lastReadAt: a.lastReadAt,
|
|
134
|
+
maxScore: a.maxScore,
|
|
135
|
+
avgScore: a.totalScore / a.reads,
|
|
136
|
+
}))
|
|
137
|
+
.sort(compareStats);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function buildRecallUsageReport(
|
|
141
|
+
patterns: readonly RecallPatternUsageRef[],
|
|
142
|
+
parsed: ParsedRecallUsageLog,
|
|
143
|
+
): RecallUsageReport {
|
|
144
|
+
const stats = aggregateRecallUsage(parsed.records);
|
|
145
|
+
const statsById = new Map(stats.map((s) => [s.dzId, s]));
|
|
146
|
+
const patternIds = new Set<string>();
|
|
147
|
+
const all: RecallUsagePatternRow[] = [];
|
|
148
|
+
|
|
149
|
+
for (const p of patterns) {
|
|
150
|
+
if (p.dzId.trim() === '') continue;
|
|
151
|
+
if (patternIds.has(p.dzId)) continue;
|
|
152
|
+
patternIds.add(p.dzId);
|
|
153
|
+
const stat = statsById.get(p.dzId);
|
|
154
|
+
const base = patternRef(p);
|
|
155
|
+
if (stat === undefined) {
|
|
156
|
+
all.push({ ...base, reads: 0 });
|
|
157
|
+
} else {
|
|
158
|
+
all.push({
|
|
159
|
+
...base,
|
|
160
|
+
reads: stat.reads,
|
|
161
|
+
firstReadAt: stat.firstReadAt,
|
|
162
|
+
lastReadAt: stat.lastReadAt,
|
|
163
|
+
maxScore: stat.maxScore,
|
|
164
|
+
avgScore: stat.avgScore,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const top = all.filter((r) => r.reads > 0).sort(compareRows);
|
|
170
|
+
const neverRead = all.filter((r) => r.reads === 0).sort((a, b) => a.dzId.localeCompare(b.dzId));
|
|
171
|
+
const unknown = stats.filter((s) => !patternIds.has(s.dzId)).sort(compareStats);
|
|
172
|
+
|
|
173
|
+
return {
|
|
174
|
+
totalPatterns: all.length,
|
|
175
|
+
usedPatterns: top.length,
|
|
176
|
+
neverReadPatterns: neverRead.length,
|
|
177
|
+
totalReads: stats.reduce((sum, s) => sum + s.reads, 0),
|
|
178
|
+
unknownReadPatterns: unknown.length,
|
|
179
|
+
invalidLines: parsed.invalidLines,
|
|
180
|
+
top,
|
|
181
|
+
neverRead,
|
|
182
|
+
unknown,
|
|
183
|
+
all: all.sort(compareRows),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function shouldCompactRecallUsageLogSize(
|
|
188
|
+
sizeBytes: number,
|
|
189
|
+
maxBytes: number = RECALL_USAGE_LOG_MAX_BYTES,
|
|
190
|
+
): boolean {
|
|
191
|
+
return Number.isFinite(sizeBytes) && sizeBytes > validMax(maxBytes);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function compactRecallUsageLog(
|
|
195
|
+
text: string,
|
|
196
|
+
opts: { readonly maxBytes?: number; readonly targetBytes?: number; readonly compactedAt?: string } = {},
|
|
197
|
+
): string {
|
|
198
|
+
const maxBytes = validMax(opts.maxBytes ?? RECALL_USAGE_LOG_MAX_BYTES);
|
|
199
|
+
const targetBytes = validTarget(opts.targetBytes ?? Math.floor(maxBytes * 0.75), maxBytes);
|
|
200
|
+
const compactedAt = validTs(opts.compactedAt) ? opts.compactedAt : new Date(0).toISOString();
|
|
201
|
+
const stats = aggregateRecallUsage(parseRecallUsageLog(text).records);
|
|
202
|
+
const lines = stats.map((s) => aggregateLine(s, compactedAt));
|
|
203
|
+
let out = joinLines(lines);
|
|
204
|
+
if (byteLength(out) <= maxBytes) return out;
|
|
205
|
+
|
|
206
|
+
const kept: string[] = [];
|
|
207
|
+
let used = 0;
|
|
208
|
+
for (const line of lines) {
|
|
209
|
+
const cost = byteLength(`${line}\n`);
|
|
210
|
+
if (kept.length > 0 && used + cost > targetBytes) continue;
|
|
211
|
+
if (cost > maxBytes) continue;
|
|
212
|
+
if (used + cost <= maxBytes) {
|
|
213
|
+
kept.push(line);
|
|
214
|
+
used += cost;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
out = joinLines(kept);
|
|
218
|
+
return byteLength(out) <= maxBytes ? out : '';
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function normalizeRecord(value: unknown): RecallUsageRecord | undefined {
|
|
222
|
+
if (!isRecord(value)) return undefined;
|
|
223
|
+
if (value['kind'] === 'aggregate') return normalizeAggregateRecord(value);
|
|
224
|
+
return normalizeReadRecord(value);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function normalizeReadRecord(value: unknown): RecallUsageReadRecord | undefined {
|
|
228
|
+
if (!isRecord(value)) return undefined;
|
|
229
|
+
const dzId = value['dzId'];
|
|
230
|
+
const score = value['score'];
|
|
231
|
+
const ts = value['ts'];
|
|
232
|
+
if (typeof dzId !== 'string' || dzId.trim() === '') return undefined;
|
|
233
|
+
if (typeof score !== 'number' || !Number.isFinite(score)) return undefined;
|
|
234
|
+
if (!validTs(ts)) return undefined;
|
|
235
|
+
return { dzId: dzId.trim(), score, ts };
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function normalizeAggregateRecord(value: Record<string, unknown>): RecallUsageAggregateRecord | undefined {
|
|
239
|
+
const dzId = value['dzId'];
|
|
240
|
+
const reads = value['reads'];
|
|
241
|
+
const firstReadAt = value['firstReadAt'];
|
|
242
|
+
const lastReadAt = value['lastReadAt'];
|
|
243
|
+
const maxScore = value['maxScore'];
|
|
244
|
+
const totalScore = value['totalScore'];
|
|
245
|
+
const compactedAt = value['compactedAt'];
|
|
246
|
+
if (typeof dzId !== 'string' || dzId.trim() === '') return undefined;
|
|
247
|
+
if (typeof reads !== 'number' || !Number.isInteger(reads) || reads <= 0) return undefined;
|
|
248
|
+
if (!validTs(firstReadAt) || !validTs(lastReadAt) || !validTs(compactedAt)) return undefined;
|
|
249
|
+
if (typeof maxScore !== 'number' || !Number.isFinite(maxScore)) return undefined;
|
|
250
|
+
if (typeof totalScore !== 'number' || !Number.isFinite(totalScore)) return undefined;
|
|
251
|
+
return { kind: 'aggregate', dzId: dzId.trim(), reads, firstReadAt, lastReadAt, maxScore, totalScore, compactedAt };
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function mergeRead(byId: Map<string, Acc>, rec: RecallUsageReadRecord): void {
|
|
255
|
+
const ms = Date.parse(rec.ts);
|
|
256
|
+
const prev = byId.get(rec.dzId);
|
|
257
|
+
if (prev === undefined) {
|
|
258
|
+
byId.set(rec.dzId, {
|
|
259
|
+
dzId: rec.dzId,
|
|
260
|
+
reads: 1,
|
|
261
|
+
firstReadAt: rec.ts,
|
|
262
|
+
firstMs: ms,
|
|
263
|
+
lastReadAt: rec.ts,
|
|
264
|
+
lastMs: ms,
|
|
265
|
+
maxScore: rec.score,
|
|
266
|
+
totalScore: rec.score,
|
|
267
|
+
});
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
prev.reads += 1;
|
|
271
|
+
prev.totalScore += rec.score;
|
|
272
|
+
prev.maxScore = Math.max(prev.maxScore, rec.score);
|
|
273
|
+
if (ms < prev.firstMs) {
|
|
274
|
+
prev.firstMs = ms;
|
|
275
|
+
prev.firstReadAt = rec.ts;
|
|
276
|
+
}
|
|
277
|
+
if (ms >= prev.lastMs) {
|
|
278
|
+
prev.lastMs = ms;
|
|
279
|
+
prev.lastReadAt = rec.ts;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function mergeAggregate(byId: Map<string, Acc>, rec: RecallUsageAggregateRecord): void {
|
|
284
|
+
const firstMs = Date.parse(rec.firstReadAt);
|
|
285
|
+
const lastMs = Date.parse(rec.lastReadAt);
|
|
286
|
+
const prev = byId.get(rec.dzId);
|
|
287
|
+
if (prev === undefined) {
|
|
288
|
+
byId.set(rec.dzId, {
|
|
289
|
+
dzId: rec.dzId,
|
|
290
|
+
reads: rec.reads,
|
|
291
|
+
firstReadAt: rec.firstReadAt,
|
|
292
|
+
firstMs,
|
|
293
|
+
lastReadAt: rec.lastReadAt,
|
|
294
|
+
lastMs,
|
|
295
|
+
maxScore: rec.maxScore,
|
|
296
|
+
totalScore: rec.totalScore,
|
|
297
|
+
});
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
prev.reads += rec.reads;
|
|
301
|
+
prev.totalScore += rec.totalScore;
|
|
302
|
+
prev.maxScore = Math.max(prev.maxScore, rec.maxScore);
|
|
303
|
+
if (firstMs < prev.firstMs) {
|
|
304
|
+
prev.firstMs = firstMs;
|
|
305
|
+
prev.firstReadAt = rec.firstReadAt;
|
|
306
|
+
}
|
|
307
|
+
if (lastMs >= prev.lastMs) {
|
|
308
|
+
prev.lastMs = lastMs;
|
|
309
|
+
prev.lastReadAt = rec.lastReadAt;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
function aggregateLine(stat: RecallUsageStat, compactedAt: string): string {
|
|
314
|
+
const rec: RecallUsageAggregateRecord = {
|
|
315
|
+
kind: 'aggregate',
|
|
316
|
+
dzId: stat.dzId,
|
|
317
|
+
reads: stat.reads,
|
|
318
|
+
firstReadAt: stat.firstReadAt,
|
|
319
|
+
lastReadAt: stat.lastReadAt,
|
|
320
|
+
maxScore: stat.maxScore,
|
|
321
|
+
totalScore: stat.avgScore * stat.reads,
|
|
322
|
+
compactedAt,
|
|
323
|
+
};
|
|
324
|
+
return JSON.stringify(rec);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
function patternRef(p: RecallPatternUsageRef): RecallPatternUsageRef {
|
|
328
|
+
return {
|
|
329
|
+
dzId: p.dzId,
|
|
330
|
+
pattern: p.pattern,
|
|
331
|
+
...(p.domain !== undefined ? { domain: p.domain } : {}),
|
|
332
|
+
...(p.reward !== undefined ? { reward: p.reward } : {}),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function compareStats(a: RecallUsageStat, b: RecallUsageStat): number {
|
|
337
|
+
return b.reads - a.reads || Date.parse(b.lastReadAt) - Date.parse(a.lastReadAt) || a.dzId.localeCompare(b.dzId);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function compareRows(a: RecallUsagePatternRow, b: RecallUsagePatternRow): number {
|
|
341
|
+
const aLast = a.lastReadAt === undefined ? 0 : Date.parse(a.lastReadAt);
|
|
342
|
+
const bLast = b.lastReadAt === undefined ? 0 : Date.parse(b.lastReadAt);
|
|
343
|
+
return b.reads - a.reads || bLast - aLast || a.dzId.localeCompare(b.dzId);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function isAggregate(rec: RecallUsageRecord): rec is RecallUsageAggregateRecord {
|
|
347
|
+
return 'kind' in rec && rec.kind === 'aggregate';
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
351
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function validTs(value: unknown): value is string {
|
|
355
|
+
return typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Date.parse(value));
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function validMax(value: number): number {
|
|
359
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : RECALL_USAGE_LOG_MAX_BYTES;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function validTarget(value: number, maxBytes: number): number {
|
|
363
|
+
if (!Number.isFinite(value) || value <= 0) return Math.floor(maxBytes * 0.75);
|
|
364
|
+
return Math.min(Math.floor(value), maxBytes);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function joinLines(lines: readonly string[]): string {
|
|
368
|
+
return lines.length === 0 ? '' : `${lines.join('\n')}\n`;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
function byteLength(text: string): number {
|
|
372
|
+
return text.length;
|
|
373
|
+
}
|
package/src/statusline.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { dirname, join, resolve } from 'node:path';
|
|
|
19
19
|
import { createRequire } from 'node:module';
|
|
20
20
|
|
|
21
21
|
import { listBrain } from './brain.js';
|
|
22
|
+
import { RECALL_USAGE_LOG_RELATIVE, aggregateRecallUsage, parseRecallUsageLog } from './recall-usage.js';
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Live learning state for one in-flight `/feature-adr` run — the per-run visibility panel
|
|
@@ -49,6 +50,8 @@ export interface FeatureAdrState {
|
|
|
49
50
|
export interface StatuslineData {
|
|
50
51
|
/** Count of learned patterns in the project's unified memory store. */
|
|
51
52
|
readonly patterns: number;
|
|
53
|
+
/** Count of learned patterns that the live recall hook has actually injected at least once. */
|
|
54
|
+
readonly usedPatterns?: number;
|
|
52
55
|
/** Number of sources registered in the durable cross-project knowledge brain. */
|
|
53
56
|
readonly brainSources: number;
|
|
54
57
|
/** Hours since the last `dz consolidate` run, if a watermark is present. */
|
|
@@ -138,6 +141,18 @@ function countLearnedPatterns(projectRoot: string): number {
|
|
|
138
141
|
return countJsonlPatternsReadonly(projectRoot);
|
|
139
142
|
}
|
|
140
143
|
|
|
144
|
+
function countUsedPatternsReadonly(projectRoot: string): number | undefined {
|
|
145
|
+
const path = join(projectRoot, RECALL_USAGE_LOG_RELATIVE);
|
|
146
|
+
if (!existsSync(path)) return undefined;
|
|
147
|
+
try {
|
|
148
|
+
const parsed = parseRecallUsageLog(readFileSync(path, 'utf-8'));
|
|
149
|
+
if (parsed.records.length === 0) return undefined;
|
|
150
|
+
return aggregateRecallUsage(parsed.records).length;
|
|
151
|
+
} catch {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
141
156
|
/** Hours since the last consolidation, or `undefined` when never consolidated / unreadable. */
|
|
142
157
|
function consolidatedAgeHours(projectRoot: string, now: number): number | undefined {
|
|
143
158
|
const path = consolidateWatermarkPath(projectRoot);
|
|
@@ -268,6 +283,13 @@ export function statuslineData(projectRoot: string, now: number = Date.now()): S
|
|
|
268
283
|
brainSources = 0;
|
|
269
284
|
}
|
|
270
285
|
|
|
286
|
+
let usedPatterns: number | undefined;
|
|
287
|
+
try {
|
|
288
|
+
usedPatterns = countUsedPatternsReadonly(root);
|
|
289
|
+
} catch {
|
|
290
|
+
usedPatterns = undefined;
|
|
291
|
+
}
|
|
292
|
+
|
|
271
293
|
const ageH = consolidatedAgeHours(root, now);
|
|
272
294
|
|
|
273
295
|
// Live /feature-adr panel — attached ONLY when a fresh run is in flight (readonly, never throws).
|
|
@@ -280,6 +302,7 @@ export function statuslineData(projectRoot: string, now: number = Date.now()): S
|
|
|
280
302
|
|
|
281
303
|
return {
|
|
282
304
|
patterns,
|
|
305
|
+
...(usedPatterns !== undefined ? { usedPatterns } : {}),
|
|
283
306
|
brainSources,
|
|
284
307
|
...(ageH !== undefined ? { consolidatedAgeH: ageH } : {}),
|
|
285
308
|
...(featureAdr !== undefined ? { featureAdr } : {}),
|