@ironbee-ai/cli 0.6.2 → 0.7.1
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/CHANGELOG.md +12 -0
- package/README.md +167 -39
- package/dist/analysis/code-changes.js.map +1 -1
- package/dist/analysis/cross-session.js.map +1 -1
- package/dist/analysis/fix-effectiveness.js.map +1 -1
- package/dist/analysis/time-analysis.js.map +1 -1
- package/dist/analysis/verdict-details.js.map +1 -1
- package/dist/analysis/verification-quality.js.map +1 -1
- package/dist/analytics/classifier.d.ts +99 -0
- package/dist/analytics/classifier.d.ts.map +1 -0
- package/dist/analytics/classifier.js +380 -0
- package/dist/analytics/classifier.js.map +1 -0
- package/dist/analytics/emit.d.ts +67 -0
- package/dist/analytics/emit.d.ts.map +1 -0
- package/dist/analytics/emit.js +901 -0
- package/dist/analytics/emit.js.map +1 -0
- package/dist/analytics/errors.d.ts +33 -0
- package/dist/analytics/errors.d.ts.map +1 -0
- package/dist/analytics/errors.js +93 -0
- package/dist/analytics/errors.js.map +1 -0
- package/dist/analytics/hook-trigger.d.ts +39 -0
- package/dist/analytics/hook-trigger.d.ts.map +1 -0
- package/dist/analytics/hook-trigger.js +127 -0
- package/dist/analytics/hook-trigger.js.map +1 -0
- package/dist/analytics/log.d.ts +44 -0
- package/dist/analytics/log.d.ts.map +1 -0
- package/dist/analytics/log.js +158 -0
- package/dist/analytics/log.js.map +1 -0
- package/dist/analytics/merge.d.ts +40 -0
- package/dist/analytics/merge.d.ts.map +1 -0
- package/dist/analytics/merge.js +527 -0
- package/dist/analytics/merge.js.map +1 -0
- package/dist/analytics/pricing.d.ts +149 -0
- package/dist/analytics/pricing.d.ts.map +1 -0
- package/dist/analytics/pricing.js +179 -0
- package/dist/analytics/pricing.js.map +1 -0
- package/dist/analytics/projection.d.ts +356 -0
- package/dist/analytics/projection.d.ts.map +1 -0
- package/dist/analytics/projection.js +2281 -0
- package/dist/analytics/projection.js.map +1 -0
- package/dist/analytics/spawn.d.ts +28 -0
- package/dist/analytics/spawn.d.ts.map +1 -0
- package/dist/analytics/spawn.js +57 -0
- package/dist/analytics/spawn.js.map +1 -0
- package/dist/analytics/state.d.ts +58 -0
- package/dist/analytics/state.d.ts.map +1 -0
- package/dist/analytics/state.js +329 -0
- package/dist/analytics/state.js.map +1 -0
- package/dist/analytics/transcript.d.ts +150 -0
- package/dist/analytics/transcript.d.ts.map +1 -0
- package/dist/analytics/transcript.js +276 -0
- package/dist/analytics/transcript.js.map +1 -0
- package/dist/analytics/types.d.ts +875 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +31 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/clients/base.d.ts +21 -2
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/commands/ironbee-verify.md +15 -7
- package/dist/clients/claude/fragments/command-verify.node.md +33 -0
- package/dist/clients/claude/fragments/rule.node.md +29 -0
- package/dist/clients/claude/fragments/skill.node.md +77 -0
- package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
- package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/claude/hooks/activity-end.js +42 -0
- package/dist/clients/claude/hooks/activity-end.js.map +1 -0
- package/dist/clients/claude/hooks/require-verdict.d.ts +3 -2
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +6 -5
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verification.js +44 -22
- package/dist/clients/claude/hooks/require-verification.js.map +1 -1
- package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-end.js +17 -2
- package/dist/clients/claude/hooks/session-end.js.map +1 -1
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +2 -1
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
- package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
- package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +29 -20
- package/dist/clients/claude/hooks/track-action.js.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.js +18 -1
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts +4 -1
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +171 -94
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/rules/ironbee-verification.md +41 -33
- package/dist/clients/claude/skills/ironbee-verification.md +93 -76
- package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
- package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
- package/dist/clients/cursor/fragments/rule.node.md +29 -0
- package/dist/clients/cursor/fragments/skill.node.md +77 -0
- package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
- package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/activity-end.js +45 -0
- package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
- package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +4 -4
- package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.js +42 -16
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-end.js +18 -2
- package/dist/clients/cursor/hooks/session-end.js.map +1 -1
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +2 -1
- package/dist/clients/cursor/hooks/session-start.js.map +1 -1
- package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
- package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
- package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/track-action.js +51 -23
- package/dist/clients/cursor/hooks/track-action.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +14 -1
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts +4 -1
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +117 -71
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
- package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
- package/dist/clients/registry.d.ts +14 -0
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +34 -0
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +40 -0
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/backend-toggle.d.ts +45 -0
- package/dist/commands/backend-toggle.d.ts.map +1 -0
- package/dist/commands/backend-toggle.js +192 -0
- package/dist/commands/backend-toggle.js.map +1 -0
- package/dist/commands/disable-backend.d.ts +14 -0
- package/dist/commands/disable-backend.d.ts.map +1 -0
- package/dist/commands/disable-backend.js +34 -0
- package/dist/commands/disable-backend.js.map +1 -0
- package/dist/commands/disable-verification.d.ts +16 -0
- package/dist/commands/disable-verification.d.ts.map +1 -0
- package/dist/commands/disable-verification.js +36 -0
- package/dist/commands/disable-verification.js.map +1 -0
- package/dist/commands/enable-backend.d.ts +15 -0
- package/dist/commands/enable-backend.d.ts.map +1 -0
- package/dist/commands/enable-backend.js +35 -0
- package/dist/commands/enable-backend.js.map +1 -0
- package/dist/commands/enable-verification.d.ts +14 -0
- package/dist/commands/enable-verification.d.ts.map +1 -0
- package/dist/commands/enable-verification.js +34 -0
- package/dist/commands/enable-verification.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +60 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import.d.ts +39 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +369 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +15 -20
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/process-analytics.d.ts +18 -0
- package/dist/commands/process-analytics.d.ts.map +1 -0
- package/dist/commands/process-analytics.js +57 -0
- package/dist/commands/process-analytics.js.map +1 -0
- package/dist/commands/queue.d.ts +2 -3
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +2 -3
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +29 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verification-toggle.d.ts +47 -0
- package/dist/commands/verification-toggle.d.ts.map +1 -0
- package/dist/commands/verification-toggle.js +122 -0
- package/dist/commands/verification-toggle.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +28 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +72 -70
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +191 -28
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/activity-end.d.ts +20 -0
- package/dist/hooks/core/activity-end.d.ts.map +1 -0
- package/dist/hooks/core/activity-end.js +23 -0
- package/dist/hooks/core/activity-end.js.map +1 -0
- package/dist/hooks/core/required-tools.d.ts +30 -0
- package/dist/hooks/core/required-tools.d.ts.map +1 -0
- package/dist/hooks/core/required-tools.js +70 -0
- package/dist/hooks/core/required-tools.js.map +1 -0
- package/dist/hooks/core/session-state.d.ts +12 -3
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +59 -0
- package/dist/hooks/core/session-state.js.map +1 -1
- package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
- package/dist/hooks/core/submit-verdict.js +16 -12
- package/dist/hooks/core/submit-verdict.js.map +1 -1
- package/dist/hooks/core/verify-gate.d.ts +17 -3
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +312 -116
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/import/claude/analytics-runner.d.ts +42 -0
- package/dist/import/claude/analytics-runner.d.ts.map +1 -0
- package/dist/import/claude/analytics-runner.js +213 -0
- package/dist/import/claude/analytics-runner.js.map +1 -0
- package/dist/import/claude/discovery.d.ts +22 -0
- package/dist/import/claude/discovery.d.ts.map +1 -0
- package/dist/import/claude/discovery.js +197 -0
- package/dist/import/claude/discovery.js.map +1 -0
- package/dist/import/claude/encoding.d.ts +50 -0
- package/dist/import/claude/encoding.d.ts.map +1 -0
- package/dist/import/claude/encoding.js +110 -0
- package/dist/import/claude/encoding.js.map +1 -0
- package/dist/import/claude/events/file-change.d.ts +28 -0
- package/dist/import/claude/events/file-change.d.ts.map +1 -0
- package/dist/import/claude/events/file-change.js +112 -0
- package/dist/import/claude/events/file-change.js.map +1 -0
- package/dist/import/claude/events/tool-call.d.ts +61 -0
- package/dist/import/claude/events/tool-call.d.ts.map +1 -0
- package/dist/import/claude/events/tool-call.js +119 -0
- package/dist/import/claude/events/tool-call.js.map +1 -0
- package/dist/import/claude/runner.d.ts +31 -0
- package/dist/import/claude/runner.d.ts.map +1 -0
- package/dist/import/claude/runner.js +280 -0
- package/dist/import/claude/runner.js.map +1 -0
- package/dist/import/claude/summary.d.ts +23 -0
- package/dist/import/claude/summary.d.ts.map +1 -0
- package/dist/import/claude/summary.js +186 -0
- package/dist/import/claude/summary.js.map +1 -0
- package/dist/import/claude/transcript-walk.d.ts +52 -0
- package/dist/import/claude/transcript-walk.d.ts.map +1 -0
- package/dist/import/claude/transcript-walk.js +187 -0
- package/dist/import/claude/transcript-walk.js.map +1 -0
- package/dist/import/concurrent-pool.d.ts +45 -0
- package/dist/import/concurrent-pool.d.ts.map +1 -0
- package/dist/import/concurrent-pool.js +95 -0
- package/dist/import/concurrent-pool.js.map +1 -0
- package/dist/import/emitter.d.ts +29 -0
- package/dist/import/emitter.d.ts.map +1 -0
- package/dist/import/emitter.js +66 -0
- package/dist/import/emitter.js.map +1 -0
- package/dist/import/events/activity.d.ts +23 -0
- package/dist/import/events/activity.d.ts.map +1 -0
- package/dist/import/events/activity.js +45 -0
- package/dist/import/events/activity.js.map +1 -0
- package/dist/import/events/session.d.ts +24 -0
- package/dist/import/events/session.d.ts.map +1 -0
- package/dist/import/events/session.js +47 -0
- package/dist/import/events/session.js.map +1 -0
- package/dist/import/filter.d.ts +47 -0
- package/dist/import/filter.d.ts.map +1 -0
- package/dist/import/filter.js +90 -0
- package/dist/import/filter.js.map +1 -0
- package/dist/import/ids.d.ts +56 -0
- package/dist/import/ids.d.ts.map +1 -0
- package/dist/import/ids.js +87 -0
- package/dist/import/ids.js.map +1 -0
- package/dist/import/index.d.ts +29 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +52 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/marker.d.ts +20 -0
- package/dist/import/marker.d.ts.map +1 -0
- package/dist/import/marker.js +71 -0
- package/dist/import/marker.js.map +1 -0
- package/dist/import/pipeline.d.ts +41 -0
- package/dist/import/pipeline.d.ts.map +1 -0
- package/dist/import/pipeline.js +47 -0
- package/dist/import/pipeline.js.map +1 -0
- package/dist/import/progress.d.ts +20 -0
- package/dist/import/progress.d.ts.map +1 -0
- package/dist/import/progress.js +69 -0
- package/dist/import/progress.js.map +1 -0
- package/dist/import/skip.d.ts +13 -0
- package/dist/import/skip.d.ts.map +1 -0
- package/dist/import/skip.js +24 -0
- package/dist/import/skip.js.map +1 -0
- package/dist/import/types.d.ts +125 -0
- package/dist/import/types.d.ts.map +1 -0
- package/dist/import/types.js +28 -0
- package/dist/import/types.js.map +1 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/collector.d.ts +29 -3
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +118 -8
- package/dist/lib/collector.js.map +1 -1
- package/dist/lib/config.d.ts +240 -83
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +482 -89
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/event.d.ts +72 -0
- package/dist/lib/event.d.ts.map +1 -0
- package/dist/lib/event.js +42 -0
- package/dist/lib/event.js.map +1 -0
- package/dist/lib/gitignore.d.ts +21 -0
- package/dist/lib/gitignore.d.ts.map +1 -0
- package/dist/lib/gitignore.js +54 -0
- package/dist/lib/gitignore.js.map +1 -0
- package/dist/lib/runtime-section.d.ts +118 -0
- package/dist/lib/runtime-section.d.ts.map +1 -0
- package/dist/lib/runtime-section.js +256 -0
- package/dist/lib/runtime-section.js.map +1 -0
- package/dist/lib/telemetry.d.ts +1 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +4 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/queue/dead-letter.d.ts +5 -1
- package/dist/queue/dead-letter.d.ts.map +1 -1
- package/dist/queue/dead-letter.js +5 -1
- package/dist/queue/dead-letter.js.map +1 -1
- package/dist/queue/drain.d.ts +3 -2
- package/dist/queue/drain.d.ts.map +1 -1
- package/dist/queue/drain.js +3 -2
- package/dist/queue/drain.js.map +1 -1
- package/dist/queue/flush.d.ts +28 -12
- package/dist/queue/flush.d.ts.map +1 -1
- package/dist/queue/flush.js +43 -18
- package/dist/queue/flush.js.map +1 -1
- package/dist/queue/handlers/send-event.d.ts.map +1 -1
- package/dist/queue/handlers/send-event.js.map +1 -1
- package/dist/queue/index.d.ts +1 -2
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +2 -2
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/paths.d.ts +4 -2
- package/dist/queue/paths.d.ts.map +1 -1
- package/dist/queue/paths.js +4 -2
- package/dist/queue/paths.js.map +1 -1
- package/dist/queue/process-file.d.ts +5 -1
- package/dist/queue/process-file.d.ts.map +1 -1
- package/dist/queue/process-file.js +5 -1
- package/dist/queue/process-file.js.map +1 -1
- package/dist/queue/snapshot.d.ts +4 -1
- package/dist/queue/snapshot.d.ts.map +1 -1
- package/dist/queue/snapshot.js +4 -1
- package/dist/queue/snapshot.js.map +1 -1
- package/dist/queue/spawn.d.ts +1 -3
- package/dist/queue/spawn.d.ts.map +1 -1
- package/dist/queue/spawn.js +1 -3
- package/dist/queue/spawn.js.map +1 -1
- package/dist/queue/submit.d.ts +6 -1
- package/dist/queue/submit.d.ts.map +1 -1
- package/dist/queue/submit.js +6 -1
- package/dist/queue/submit.js.map +1 -1
- package/dist/queue/types.d.ts +5 -1
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/queue/types.js +5 -1
- package/dist/queue/types.js.map +1 -1
- package/dist/queue/worker-log.d.ts +3 -1
- package/dist/queue/worker-log.d.ts.map +1 -1
- package/dist/queue/worker-log.js +3 -1
- package/dist/queue/worker-log.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/analytics/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAiB,gBAAgB,EAAE,cAAc,EAAc,cAAc,EAAmD,oBAAoB,EAAE,wBAAwB,EAAa,MAAM,SAAS,CAAC;AAC7P,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAkC7C,UAAU,YAAY;IAClB,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC7C,mBAAmB,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACjD,0BAA0B,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnD,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC5B,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,aAAa,GAC7B,WAAW,CA4Pb"}
|
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee CLI — Analytics Merge
|
|
4
|
+
*
|
|
5
|
+
* Merges a delta `SessionAnalytics` into the accumulated state. Type-aware
|
|
6
|
+
* — additive counters, counter maps, boolean OR, array append, distinct-set,
|
|
7
|
+
* top-K, bounds, recomputed, static, counter map of objects, replace-if-newer,
|
|
8
|
+
* max. Each field's rule is annotated inline in the merged-object literal.
|
|
9
|
+
*
|
|
10
|
+
* Determinism is a hard requirement: given the same inputs, this function
|
|
11
|
+
* must produce the same output. Unit tests verify repeatability +
|
|
12
|
+
* incremental/one-shot composition equivalence.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.mergeAccumulated = mergeAccumulated;
|
|
16
|
+
const pricing_1 = require("./pricing");
|
|
17
|
+
const logger_1 = require("../lib/logger");
|
|
18
|
+
const HOT_FILES_TOP_K = 5;
|
|
19
|
+
/**
|
|
20
|
+
* Hard cap on the in-state pending event queues. When the collector is
|
|
21
|
+
* persistently failing (e.g., backend reject due to an unknown enum
|
|
22
|
+
* value), the queues would otherwise grow without bound until SessionEnd
|
|
23
|
+
* — and then orphan on disk forever (no operator drain command exists for
|
|
24
|
+
* them). Cap protects state.json size and OOM risk on long sessions.
|
|
25
|
+
*
|
|
26
|
+
* Drop policy: FIFO — oldest entries are dropped first. The newest entries
|
|
27
|
+
* have the best chance of carrying recoverable data once the backend is
|
|
28
|
+
* fixed (since backend dedupes via deterministic id, dropped-then-redelivered
|
|
29
|
+
* entries are also safe — but only if the user re-runs analytics over the
|
|
30
|
+
* same transcript, which doesn't happen automatically).
|
|
31
|
+
*/
|
|
32
|
+
const PENDING_QUEUE_MAX = 1000;
|
|
33
|
+
function capQueueFifo(queue, max, label) {
|
|
34
|
+
if (queue.length <= max) {
|
|
35
|
+
return queue;
|
|
36
|
+
}
|
|
37
|
+
const dropCount = queue.length - max;
|
|
38
|
+
logger_1.logger.error(`analytics: ${label} exceeded max=${max} (size=${queue.length}); `
|
|
39
|
+
+ `dropping ${dropCount} oldest entries (FIFO). Indicates a persistently `
|
|
40
|
+
+ `failing collector — check session.log + analytics.log for HTTP errors.`);
|
|
41
|
+
return queue.slice(dropCount);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Merge `delta` (and the per-delta internal maps) into `accumulated`.
|
|
45
|
+
* Returns the new accumulated state plus updated internal maps.
|
|
46
|
+
*
|
|
47
|
+
* Pure function — does not mutate inputs.
|
|
48
|
+
*/
|
|
49
|
+
function mergeAccumulated(accumulated, internal, delta, deltaInternal) {
|
|
50
|
+
// ── 1. Update internal maps first (top-K and distinct-set need them) ──
|
|
51
|
+
const filePathCounts = sumCounterMap(internal.file_path_change_counts, deltaInternal.file_path_change_counts);
|
|
52
|
+
const distinctPaths = unionSorted(internal.distinct_file_paths_seen, deltaInternal.distinct_file_paths_seen);
|
|
53
|
+
// last_assistant_ts_ms: take the max (latest) across accumulated and delta.
|
|
54
|
+
let mergedLastAssistantTs = internal.last_assistant_ts_ms;
|
|
55
|
+
if (deltaInternal.last_assistant_ts_ms !== undefined) {
|
|
56
|
+
if (mergedLastAssistantTs === undefined || deltaInternal.last_assistant_ts_ms > mergedLastAssistantTs) {
|
|
57
|
+
mergedLastAssistantTs = deltaInternal.last_assistant_ts_ms;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// pending_tool_uses: replace with delta's closing snapshot. The delta
|
|
61
|
+
// already seeded itself from `internal.pending_tool_uses` and walked the
|
|
62
|
+
// slice forward; its closing map is the authoritative new state. Only
|
|
63
|
+
// persist when non-empty to keep state.json minimal.
|
|
64
|
+
const closingPending = delta.closing_pending_tool_uses;
|
|
65
|
+
// idle_ms_total: cumulative user-idle ms, accumulated additively across
|
|
66
|
+
// deltas. The delta's contribution comes from `deltaInternal.idle_ms_delta`
|
|
67
|
+
// — projectDeltaInternal computes it via the same algorithm projectDelta
|
|
68
|
+
// uses for `delta.idle_minutes`, but at ms precision so we don't lose
|
|
69
|
+
// accuracy across long sessions with many small gaps.
|
|
70
|
+
const newIdleMsTotal = (internal.idle_ms_total ?? 0) + (deltaInternal.idle_ms_delta ?? 0);
|
|
71
|
+
// Per-turn pending queue — append every SessionTurnAnalytics that
|
|
72
|
+
// closed during this slice. Emit drains and POSTs; on success the
|
|
73
|
+
// queue is cleared. On failure the queue stays so the next trigger
|
|
74
|
+
// retries (turn_id is deterministic, so backend LWW dedupes).
|
|
75
|
+
const priorPending = internal.pending_turn_events ?? [];
|
|
76
|
+
const mergedPending = capQueueFifo(delta.completed_turns.length > 0
|
|
77
|
+
? [...priorPending, ...delta.completed_turns]
|
|
78
|
+
: priorPending, PENDING_QUEUE_MAX, "pending_turn_events");
|
|
79
|
+
// Per-step pending queue — same semantics as turn pending. Each closed
|
|
80
|
+
// turn contributes N step events (N = step count in the turn). Last
|
|
81
|
+
// step in the batch carries `is_last_step=true` + the turn-bookend
|
|
82
|
+
// fields. Backend LWW per `(session_id, step_id)` dedupes re-sends.
|
|
83
|
+
const priorPendingSteps = internal.pending_step_events ?? [];
|
|
84
|
+
const mergedPendingSteps = capQueueFifo(delta.completed_steps.length > 0
|
|
85
|
+
? [...priorPendingSteps, ...delta.completed_steps]
|
|
86
|
+
: priorPendingSteps, PENDING_QUEUE_MAX, "pending_step_events");
|
|
87
|
+
// Per-API-request pending queue — append every APIRequestAnalytics body
|
|
88
|
+
// produced by this slice's projection. Same FIFO + cap semantics as turn
|
|
89
|
+
// / step queues. Backend dedup key: `(session_id, request_id)` for
|
|
90
|
+
// successes; failures have null request_id and rely on (session_id, id)
|
|
91
|
+
// best-effort.
|
|
92
|
+
const priorPendingApiRequests = internal.pending_api_request_events ?? [];
|
|
93
|
+
const mergedPendingApiRequests = capQueueFifo(delta.api_request_events.length > 0
|
|
94
|
+
? [...priorPendingApiRequests, ...delta.api_request_events]
|
|
95
|
+
: priorPendingApiRequests, PENDING_QUEUE_MAX, "pending_api_request_events");
|
|
96
|
+
// Monotonic per-session turn index — projection reports the post-walk
|
|
97
|
+
// value; we just persist what it computed.
|
|
98
|
+
const mergedNextTurnIndex = deltaInternal.next_turn_index ?? internal.next_turn_index;
|
|
99
|
+
// Anthropic msg_id dedup state — append the IDs newly counted in this
|
|
100
|
+
// slice to the running list. Projection seeds itself from this on the
|
|
101
|
+
// next slice so cross-slice duplicate API responses are still skipped.
|
|
102
|
+
const priorSeenIds = internal.seen_assistant_message_ids ?? [];
|
|
103
|
+
const newSeenIds = deltaInternal.new_assistant_message_ids ?? [];
|
|
104
|
+
const mergedSeenAssistantIds = newSeenIds.length > 0
|
|
105
|
+
? [...priorSeenIds, ...newSeenIds]
|
|
106
|
+
: priorSeenIds;
|
|
107
|
+
const newInternal = {
|
|
108
|
+
file_path_change_counts: filePathCounts,
|
|
109
|
+
distinct_file_paths_seen: distinctPaths,
|
|
110
|
+
last_assistant_ts_ms: mergedLastAssistantTs,
|
|
111
|
+
idle_ms_total: newIdleMsTotal,
|
|
112
|
+
...(Object.keys(closingPending).length > 0 ? { pending_tool_uses: closingPending } : {}),
|
|
113
|
+
// current_turn (per-turn classifier in-flight state). Persist when
|
|
114
|
+
// an open turn straddles the slice boundary; cleared when the turn
|
|
115
|
+
// closed inside the delta.
|
|
116
|
+
...(delta.closing_current_turn !== null ? { current_turn: delta.closing_current_turn } : {}),
|
|
117
|
+
...(mergedNextTurnIndex !== undefined ? { next_turn_index: mergedNextTurnIndex } : {}),
|
|
118
|
+
...(mergedPending.length > 0 ? { pending_turn_events: mergedPending } : {}),
|
|
119
|
+
...(mergedPendingSteps.length > 0 ? { pending_step_events: mergedPendingSteps } : {}),
|
|
120
|
+
...(mergedPendingApiRequests.length > 0 ? { pending_api_request_events: mergedPendingApiRequests } : {}),
|
|
121
|
+
...(mergedSeenAssistantIds.length > 0 ? { seen_assistant_message_ids: mergedSeenAssistantIds } : {}),
|
|
122
|
+
};
|
|
123
|
+
// ── 2. Compose merged accumulated (logical group structure) ───────────
|
|
124
|
+
// Field order mirrors the SessionAnalytics interface so the on-disk
|
|
125
|
+
// state.json (which is pretty-printed) groups related fields together.
|
|
126
|
+
// Per-group merge rules:
|
|
127
|
+
// time — bounds (max ISO) + recomputed minutes/hour
|
|
128
|
+
// turns — additive
|
|
129
|
+
// classification — category_breakdown element-wise additive; session_type recomputed
|
|
130
|
+
// usage — additive (Anthropic-exact tokens/cost)
|
|
131
|
+
// user_messages — additive (count, size; approximated_tokens recomputed)
|
|
132
|
+
// tool_meta — counter map + boolean OR
|
|
133
|
+
// code_changes — additive + distinct-set + top-K + counter map
|
|
134
|
+
// errors — additive + counter map
|
|
135
|
+
// user_activity — counter-map per-key sum (no per-msg arrays)
|
|
136
|
+
// context_tokens — bucket map sum + recompute avg + replace-if-newer + max
|
|
137
|
+
// process_errors — element-wise dedup; `has` recomputed
|
|
138
|
+
const mergedFilesModified = distinctPaths.length;
|
|
139
|
+
const mergedLinesAdded = accumulated.code_changes.lines_added + delta.code_changes.lines_added;
|
|
140
|
+
const mergedLinesRemoved = accumulated.code_changes.lines_removed + delta.code_changes.lines_removed;
|
|
141
|
+
const mergedHotFiles = topKHotFiles(filePathCounts, HOT_FILES_TOP_K);
|
|
142
|
+
const mergedUserMessagesCount = accumulated.user_messages.count + delta.user_messages.count;
|
|
143
|
+
const mergedUserMessagesSize = accumulated.user_messages.size + delta.user_messages.size;
|
|
144
|
+
const mergedCategoryBreakdown = mergeCategoryBreakdown(accumulated.classification.category_breakdown, delta.classification.category_breakdown);
|
|
145
|
+
const mergedProcessErrorItems = mergeProcessErrors(accumulated.process_errors.items, delta.process_errors.items);
|
|
146
|
+
const mergedProcessErrors = {
|
|
147
|
+
has: Object.keys(mergedProcessErrorItems).length > 0,
|
|
148
|
+
items: mergedProcessErrorItems,
|
|
149
|
+
};
|
|
150
|
+
const mergedStartTime = accumulated.start_time !== "" ? accumulated.start_time : delta.start_time;
|
|
151
|
+
const mergedLastActivityTime = maxIsoTimestamp(accumulated.last_activity_time, delta.last_activity_time);
|
|
152
|
+
const mergedDurationMinutes = computeDurationMinutes(mergedStartTime, mergedLastActivityTime);
|
|
153
|
+
const mergedIdleMinutes = Math.round(newIdleMsTotal / 60000);
|
|
154
|
+
const mergedActiveMinutes = Math.max(0, mergedDurationMinutes - mergedIdleMinutes);
|
|
155
|
+
const merged = {
|
|
156
|
+
// Identity / provenance — Static rule: first non-empty wins
|
|
157
|
+
session_id: accumulated.session_id || delta.session_id,
|
|
158
|
+
project_name: accumulated.project_name || delta.project_name,
|
|
159
|
+
schema_version: accumulated.schema_version || delta.schema_version,
|
|
160
|
+
transcript_source: accumulated.transcript_source || delta.transcript_source,
|
|
161
|
+
// Time bounds (flat ISO strings)
|
|
162
|
+
start_time: mergedStartTime,
|
|
163
|
+
last_activity_time: mergedLastActivityTime,
|
|
164
|
+
// Time group
|
|
165
|
+
time: {
|
|
166
|
+
duration_minutes: mergedDurationMinutes,
|
|
167
|
+
active_minutes: mergedActiveMinutes,
|
|
168
|
+
idle_minutes: mergedIdleMinutes,
|
|
169
|
+
start_hour: isoToHour(mergedStartTime),
|
|
170
|
+
last_activity_hour: isoToHour(mergedLastActivityTime),
|
|
171
|
+
},
|
|
172
|
+
// Turns group — additive
|
|
173
|
+
turns: {
|
|
174
|
+
user_count: accumulated.turns.user_count + delta.turns.user_count,
|
|
175
|
+
assistant_count: accumulated.turns.assistant_count + delta.turns.assistant_count,
|
|
176
|
+
with_retry: accumulated.turns.with_retry + delta.turns.with_retry,
|
|
177
|
+
one_shot: accumulated.turns.one_shot + delta.turns.one_shot,
|
|
178
|
+
},
|
|
179
|
+
// Classification group — element-wise additive + session_type recomputed below
|
|
180
|
+
classification: {
|
|
181
|
+
category_breakdown: mergedCategoryBreakdown,
|
|
182
|
+
session_type: "general",
|
|
183
|
+
},
|
|
184
|
+
// Usage group — additive (Anthropic-exact)
|
|
185
|
+
usage: {
|
|
186
|
+
input_tokens: accumulated.usage.input_tokens + delta.usage.input_tokens,
|
|
187
|
+
output_tokens: accumulated.usage.output_tokens + delta.usage.output_tokens,
|
|
188
|
+
cache_creation_tokens: accumulated.usage.cache_creation_tokens + delta.usage.cache_creation_tokens,
|
|
189
|
+
cache_read_tokens: accumulated.usage.cache_read_tokens + delta.usage.cache_read_tokens,
|
|
190
|
+
cost_usd: accumulated.usage.cost_usd + delta.usage.cost_usd,
|
|
191
|
+
},
|
|
192
|
+
// Models — counter map of objects
|
|
193
|
+
models: mergeModelUsage(accumulated.models, delta.models),
|
|
194
|
+
// User messages aggregate — additive; approximated_tokens recomputed from size
|
|
195
|
+
user_messages: {
|
|
196
|
+
count: mergedUserMessagesCount,
|
|
197
|
+
size: mergedUserMessagesSize,
|
|
198
|
+
approximated_tokens: mergedUserMessagesSize / pricing_1.BYTES_PER_TOKEN,
|
|
199
|
+
},
|
|
200
|
+
// Tool breakdown maps (top-level)
|
|
201
|
+
tools: mergeToolUsage(accumulated.tools, delta.tools),
|
|
202
|
+
mcp_servers: mergeToolUsage(accumulated.mcp_servers, delta.mcp_servers),
|
|
203
|
+
skills: mergeToolUsage(accumulated.skills, delta.skills),
|
|
204
|
+
sub_agents: mergeToolUsage(accumulated.sub_agents, delta.sub_agents),
|
|
205
|
+
bash_binaries: mergeToolUsage(accumulated.bash_binaries, delta.bash_binaries),
|
|
206
|
+
// Tool meta — counter map + boolean OR
|
|
207
|
+
tool_meta: {
|
|
208
|
+
...(mergeOptionalCounterMap(accumulated.tool_meta.bash_subcommands, delta.tool_meta.bash_subcommands) !== undefined
|
|
209
|
+
? { bash_subcommands: mergeOptionalCounterMap(accumulated.tool_meta.bash_subcommands, delta.tool_meta.bash_subcommands) }
|
|
210
|
+
: {}),
|
|
211
|
+
uses_sub_agent: accumulated.tool_meta.uses_sub_agent || delta.tool_meta.uses_sub_agent,
|
|
212
|
+
uses_skill: accumulated.tool_meta.uses_skill || delta.tool_meta.uses_skill,
|
|
213
|
+
uses_mcp: accumulated.tool_meta.uses_mcp || delta.tool_meta.uses_mcp,
|
|
214
|
+
uses_web_search: accumulated.tool_meta.uses_web_search || delta.tool_meta.uses_web_search,
|
|
215
|
+
uses_web_fetch: accumulated.tool_meta.uses_web_fetch || delta.tool_meta.uses_web_fetch,
|
|
216
|
+
},
|
|
217
|
+
// Code changes — additive + distinct-set + top-K + counter map
|
|
218
|
+
code_changes: {
|
|
219
|
+
files_modified: mergedFilesModified,
|
|
220
|
+
lines_added: mergedLinesAdded,
|
|
221
|
+
lines_removed: mergedLinesRemoved,
|
|
222
|
+
hot_files: mergedHotFiles,
|
|
223
|
+
languages: sumCounterMap(accumulated.code_changes.languages, delta.code_changes.languages),
|
|
224
|
+
},
|
|
225
|
+
// Errors — additive + counter map
|
|
226
|
+
errors: {
|
|
227
|
+
tool_errors_total: accumulated.errors.tool_errors_total + delta.errors.tool_errors_total,
|
|
228
|
+
tool_error_categories: sumCounterMap(accumulated.errors.tool_error_categories, delta.errors.tool_error_categories),
|
|
229
|
+
user_interruptions: accumulated.errors.user_interruptions + delta.errors.user_interruptions,
|
|
230
|
+
},
|
|
231
|
+
// User activity — counter-map per-key sum (no per-msg arrays)
|
|
232
|
+
user_activity: {
|
|
233
|
+
response_time_buckets: sumCounterMap(accumulated.user_activity.response_time_buckets, delta.user_activity.response_time_buckets),
|
|
234
|
+
messages_by_hour: sumCounterMap(accumulated.user_activity.messages_by_hour, delta.user_activity.messages_by_hour),
|
|
235
|
+
messages_by_date: sumCounterMap(accumulated.user_activity.messages_by_date, delta.user_activity.messages_by_date),
|
|
236
|
+
messages_by_weekday: sumCounterMap(accumulated.user_activity.messages_by_weekday, delta.user_activity.messages_by_weekday),
|
|
237
|
+
},
|
|
238
|
+
// Context tokens — bucket map sum (avg recomputed) + replace-if-newer + max
|
|
239
|
+
context_tokens: {
|
|
240
|
+
latest: delta.has_assistant_with_usage
|
|
241
|
+
? delta.context_tokens.latest
|
|
242
|
+
: accumulated.context_tokens.latest,
|
|
243
|
+
peak: Math.max(accumulated.context_tokens.peak, delta.context_tokens.peak),
|
|
244
|
+
buckets: mergeBucketMapWithAvg(accumulated.context_tokens.buckets, delta.context_tokens.buckets),
|
|
245
|
+
},
|
|
246
|
+
// Process errors — element-wise dedup; `has` set above
|
|
247
|
+
process_errors: mergedProcessErrors,
|
|
248
|
+
};
|
|
249
|
+
// Session type — derived from classification.category_breakdown + time + code_changes.
|
|
250
|
+
merged.classification.session_type = deriveSessionType(merged);
|
|
251
|
+
return { accumulated: merged, internal: newInternal };
|
|
252
|
+
}
|
|
253
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
254
|
+
// Helpers
|
|
255
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
256
|
+
function sumCounterMap(a, b) {
|
|
257
|
+
const out = { ...a };
|
|
258
|
+
for (const k of Object.keys(b)) {
|
|
259
|
+
out[k] = (out[k] ?? 0) + b[k];
|
|
260
|
+
}
|
|
261
|
+
return out;
|
|
262
|
+
}
|
|
263
|
+
function mergeOptionalCounterMap(a, b) {
|
|
264
|
+
if (a === undefined && b === undefined) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const merged = sumCounterMap(a ?? {}, b ?? {});
|
|
268
|
+
return Object.keys(merged).length === 0 ? undefined : merged;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Element-wise sum of two `Record<modelId, ModelUsage>` maps. Same shape
|
|
272
|
+
* as `mergeBucketMap` but for the richer per-model usage struct. Used for
|
|
273
|
+
* `SessionAnalytics.models` (per-model token + cost breakdown).
|
|
274
|
+
*/
|
|
275
|
+
function mergeModelUsage(a, b) {
|
|
276
|
+
const out = {};
|
|
277
|
+
for (const k of Object.keys(a)) {
|
|
278
|
+
out[k] = { ...a[k] };
|
|
279
|
+
}
|
|
280
|
+
for (const k of Object.keys(b)) {
|
|
281
|
+
const slot = out[k] ?? {
|
|
282
|
+
count: 0,
|
|
283
|
+
input_tokens: 0,
|
|
284
|
+
output_tokens: 0,
|
|
285
|
+
cache_creation_tokens: 0,
|
|
286
|
+
cache_read_tokens: 0,
|
|
287
|
+
cost_usd: 0,
|
|
288
|
+
};
|
|
289
|
+
out[k] = {
|
|
290
|
+
count: slot.count + b[k].count,
|
|
291
|
+
input_tokens: slot.input_tokens + b[k].input_tokens,
|
|
292
|
+
output_tokens: slot.output_tokens + b[k].output_tokens,
|
|
293
|
+
cache_creation_tokens: slot.cache_creation_tokens + b[k].cache_creation_tokens,
|
|
294
|
+
cache_read_tokens: slot.cache_read_tokens + b[k].cache_read_tokens,
|
|
295
|
+
cost_usd: slot.cost_usd + b[k].cost_usd,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
return out;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Element-wise sum of two `Record<toolName, ToolUsage>` maps. Sums raw
|
|
302
|
+
* `count`, `errors`, `input_size`, `output_size`; recomputes
|
|
303
|
+
* `approximated_*_tokens` from the merged sizes (avoids drift across many
|
|
304
|
+
* deltas). Used for `tools`, `mcp_servers`, `bash_binaries`, `skills`,
|
|
305
|
+
* `sub_agents`.
|
|
306
|
+
*/
|
|
307
|
+
function mergeToolUsage(a, b) {
|
|
308
|
+
const out = {};
|
|
309
|
+
for (const k of Object.keys(a)) {
|
|
310
|
+
out[k] = { ...a[k] };
|
|
311
|
+
}
|
|
312
|
+
for (const k of Object.keys(b)) {
|
|
313
|
+
const slot = out[k] ?? {
|
|
314
|
+
count: 0,
|
|
315
|
+
errors: 0,
|
|
316
|
+
input_size: 0,
|
|
317
|
+
output_size: 0,
|
|
318
|
+
approximated_input_tokens: 0,
|
|
319
|
+
approximated_output_tokens: 0,
|
|
320
|
+
};
|
|
321
|
+
const mergedInputSize = slot.input_size + b[k].input_size;
|
|
322
|
+
const mergedOutputSize = slot.output_size + b[k].output_size;
|
|
323
|
+
out[k] = {
|
|
324
|
+
count: slot.count + b[k].count,
|
|
325
|
+
errors: slot.errors + b[k].errors,
|
|
326
|
+
input_size: mergedInputSize,
|
|
327
|
+
output_size: mergedOutputSize,
|
|
328
|
+
approximated_input_tokens: mergedInputSize / pricing_1.BYTES_PER_TOKEN,
|
|
329
|
+
approximated_output_tokens: mergedOutputSize / pricing_1.BYTES_PER_TOKEN,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
return out;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Element-wise merge of two `Record<errorSignature, ProcessError>` maps.
|
|
336
|
+
* Same signature in both → count sums, first_seen=min ISO, last_seen=max ISO,
|
|
337
|
+
* static fields (error_type, error_message, stack_first_lines, sample_context)
|
|
338
|
+
* keep the first occurrence's value. New signatures pass through.
|
|
339
|
+
*/
|
|
340
|
+
function mergeProcessErrors(a, b) {
|
|
341
|
+
const out = {};
|
|
342
|
+
for (const k of Object.keys(a)) {
|
|
343
|
+
out[k] = { ...a[k] };
|
|
344
|
+
}
|
|
345
|
+
for (const k of Object.keys(b)) {
|
|
346
|
+
const incoming = b[k];
|
|
347
|
+
const existing = out[k];
|
|
348
|
+
if (existing === undefined) {
|
|
349
|
+
out[k] = { ...incoming };
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
out[k] = {
|
|
353
|
+
error_type: existing.error_type, // first occurrence wins
|
|
354
|
+
error_message: existing.error_message,
|
|
355
|
+
stack_first_lines: existing.stack_first_lines,
|
|
356
|
+
count: existing.count + incoming.count,
|
|
357
|
+
first_seen: minIso(existing.first_seen, incoming.first_seen),
|
|
358
|
+
last_seen: maxIso(existing.last_seen, incoming.last_seen),
|
|
359
|
+
...(existing.sample_context !== undefined ? { sample_context: existing.sample_context }
|
|
360
|
+
: incoming.sample_context !== undefined ? { sample_context: incoming.sample_context }
|
|
361
|
+
: {}),
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
return out;
|
|
365
|
+
}
|
|
366
|
+
function minIso(a, b) {
|
|
367
|
+
if (a === "" || a.length === 0) {
|
|
368
|
+
return b;
|
|
369
|
+
}
|
|
370
|
+
if (b === "" || b.length === 0) {
|
|
371
|
+
return a;
|
|
372
|
+
}
|
|
373
|
+
return a <= b ? a : b;
|
|
374
|
+
}
|
|
375
|
+
function maxIso(a, b) {
|
|
376
|
+
if (a === "" || a.length === 0) {
|
|
377
|
+
return b;
|
|
378
|
+
}
|
|
379
|
+
if (b === "" || b.length === 0) {
|
|
380
|
+
return a;
|
|
381
|
+
}
|
|
382
|
+
return a >= b ? a : b;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Element-wise additive merge of category breakdown maps. Same shape as
|
|
386
|
+
* `mergeModelUsage`/`mergeToolUsage` — per-key sum on every numeric field.
|
|
387
|
+
*/
|
|
388
|
+
function mergeCategoryBreakdown(a, b) {
|
|
389
|
+
const out = {};
|
|
390
|
+
for (const k of Object.keys(a)) {
|
|
391
|
+
out[k] = { ...a[k] };
|
|
392
|
+
}
|
|
393
|
+
for (const k of Object.keys(b)) {
|
|
394
|
+
const slot = out[k] ?? {
|
|
395
|
+
turns: 0, turns_with_edit: 0, turns_with_retry: 0,
|
|
396
|
+
total_retries: 0, cost_usd: 0,
|
|
397
|
+
};
|
|
398
|
+
out[k] = {
|
|
399
|
+
turns: slot.turns + b[k].turns,
|
|
400
|
+
turns_with_edit: slot.turns_with_edit + b[k].turns_with_edit,
|
|
401
|
+
turns_with_retry: slot.turns_with_retry + b[k].turns_with_retry,
|
|
402
|
+
total_retries: slot.total_retries + b[k].total_retries,
|
|
403
|
+
cost_usd: slot.cost_usd + b[k].cost_usd,
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
return out;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Derive the session-wide `session_type` label from accumulated state.
|
|
410
|
+
*
|
|
411
|
+
* Decision tree (first matching rule wins):
|
|
412
|
+
* 1. `quick_question` — duration_minutes < 5 AND user_turns ≤ 2 AND files_modified == 0
|
|
413
|
+
* 2. `exploration` — read/research-heavy: no edit turns, OR
|
|
414
|
+
* explore-category turns dominate (≥ 60% of total)
|
|
415
|
+
* 3. `iterative_refinement` — heavy concentration on a small file set:
|
|
416
|
+
* `hot_files[0].change_count` ≥ 5 AND ≥ 50% of total file-change events
|
|
417
|
+
* 4. `multi_task` — user_turns ≥ 3 (multiple distinct human prompts)
|
|
418
|
+
* 5. `single_task` — has at least one edit, focused
|
|
419
|
+
* 6. `general` — default / no signal
|
|
420
|
+
*/
|
|
421
|
+
function deriveSessionType(acc) {
|
|
422
|
+
const totalTurns = Object.values(acc.classification.category_breakdown).reduce((s, c) => s + c.turns, 0);
|
|
423
|
+
const editTurns = Object.values(acc.classification.category_breakdown).reduce((s, c) => s + c.turns_with_edit, 0);
|
|
424
|
+
const explorationTurns = (acc.classification.category_breakdown["exploration"]?.turns ?? 0)
|
|
425
|
+
+ (acc.classification.category_breakdown["brainstorming"]?.turns ?? 0);
|
|
426
|
+
// 1. Quick question
|
|
427
|
+
if (acc.time.duration_minutes < 5 && acc.turns.user_count <= 2 && acc.code_changes.files_modified === 0) {
|
|
428
|
+
return "quick_question";
|
|
429
|
+
}
|
|
430
|
+
// 2. Exploration-dominant
|
|
431
|
+
if (totalTurns >= 2 && editTurns === 0) {
|
|
432
|
+
return "exploration";
|
|
433
|
+
}
|
|
434
|
+
if (totalTurns >= 3 && explorationTurns / totalTurns >= 0.6) {
|
|
435
|
+
return "exploration";
|
|
436
|
+
}
|
|
437
|
+
// 3. Iterative refinement — hot_files concentration
|
|
438
|
+
if (acc.code_changes.hot_files.length > 0) {
|
|
439
|
+
const top = acc.code_changes.hot_files[0];
|
|
440
|
+
const totalChanges = acc.code_changes.hot_files.reduce((s, f) => s + f.change_count, 0);
|
|
441
|
+
if (top.change_count >= 5 && totalChanges > 0 && top.change_count / totalChanges >= 0.5) {
|
|
442
|
+
return "iterative_refinement";
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// 4. Multi-task
|
|
446
|
+
if (acc.turns.user_count >= 3) {
|
|
447
|
+
return "multi_task";
|
|
448
|
+
}
|
|
449
|
+
// 5. Single task — has edit
|
|
450
|
+
if (editTurns > 0) {
|
|
451
|
+
return "single_task";
|
|
452
|
+
}
|
|
453
|
+
return "general";
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Element-wise sum of context_tokens.buckets maps. Includes `avg` field,
|
|
457
|
+
* recomputed from merged sum/count. Bucket value shape:
|
|
458
|
+
* `{ sum, count, avg }` where `avg = sum/count` (or 0 when count===0).
|
|
459
|
+
*/
|
|
460
|
+
function mergeBucketMapWithAvg(a, b) {
|
|
461
|
+
const out = {};
|
|
462
|
+
for (const k of Object.keys(a)) {
|
|
463
|
+
out[k] = { sum: a[k].sum, count: a[k].count, avg: a[k].avg };
|
|
464
|
+
}
|
|
465
|
+
for (const k of Object.keys(b)) {
|
|
466
|
+
const slot = out[k] ?? { sum: 0, count: 0, avg: 0 };
|
|
467
|
+
const mergedSum = slot.sum + b[k].sum;
|
|
468
|
+
const mergedCount = slot.count + b[k].count;
|
|
469
|
+
out[k] = {
|
|
470
|
+
sum: mergedSum,
|
|
471
|
+
count: mergedCount,
|
|
472
|
+
avg: mergedCount > 0 ? mergedSum / mergedCount : 0,
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
return out;
|
|
476
|
+
}
|
|
477
|
+
function unionSorted(a, b) {
|
|
478
|
+
const set = new Set(a);
|
|
479
|
+
for (const x of b) {
|
|
480
|
+
set.add(x);
|
|
481
|
+
}
|
|
482
|
+
return Array.from(set).sort();
|
|
483
|
+
}
|
|
484
|
+
function maxIsoTimestamp(a, b) {
|
|
485
|
+
if (a === "" || a.length === 0) {
|
|
486
|
+
return b;
|
|
487
|
+
}
|
|
488
|
+
if (b === "" || b.length === 0) {
|
|
489
|
+
return a;
|
|
490
|
+
}
|
|
491
|
+
return a >= b ? a : b;
|
|
492
|
+
}
|
|
493
|
+
function isoToHour(iso) {
|
|
494
|
+
if (iso === "" || iso.length === 0) {
|
|
495
|
+
return 0;
|
|
496
|
+
}
|
|
497
|
+
const ms = Date.parse(iso);
|
|
498
|
+
if (Number.isNaN(ms)) {
|
|
499
|
+
return 0;
|
|
500
|
+
}
|
|
501
|
+
return new Date(ms).getHours();
|
|
502
|
+
}
|
|
503
|
+
function computeDurationMinutes(startIso, endIso) {
|
|
504
|
+
if (startIso === "" || endIso === "") {
|
|
505
|
+
return 0;
|
|
506
|
+
}
|
|
507
|
+
const start = Date.parse(startIso);
|
|
508
|
+
const end = Date.parse(endIso);
|
|
509
|
+
if (Number.isNaN(start) || Number.isNaN(end) || end <= start) {
|
|
510
|
+
return 0;
|
|
511
|
+
}
|
|
512
|
+
return Math.round((end - start) / 60000);
|
|
513
|
+
}
|
|
514
|
+
function topKHotFiles(counts, k) {
|
|
515
|
+
const entries = Object.entries(counts);
|
|
516
|
+
entries.sort((x, y) => {
|
|
517
|
+
if (y[1] !== x[1]) {
|
|
518
|
+
return y[1] - x[1];
|
|
519
|
+
}
|
|
520
|
+
return x[0].localeCompare(y[0]);
|
|
521
|
+
});
|
|
522
|
+
return entries.slice(0, k).map(([path, count]) => ({
|
|
523
|
+
path,
|
|
524
|
+
change_count: count,
|
|
525
|
+
}));
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/analytics/merge.ts"],"names":[],"mappings":"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"}
|