@ironbee-ai/cli 0.6.1 → 0.7.0
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 +3 -3
- 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/clear-verdict.d.ts +9 -4
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +50 -12
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts +8 -3
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +17 -6
- 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 +185 -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/clear-verdict.d.ts +13 -4
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +59 -14
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts +8 -3
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +17 -6
- package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
- 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 +131 -65
- 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 +113 -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 +77 -70
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +45 -30
- 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/file-diff.d.ts +19 -0
- package/dist/hooks/core/file-diff.d.ts.map +1 -0
- package/dist/hooks/core/file-diff.js +39 -0
- package/dist/hooks/core/file-diff.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/tool-use-stash.d.ts +41 -0
- package/dist/hooks/core/tool-use-stash.d.ts.map +1 -0
- package/dist/hooks/core/tool-use-stash.js +82 -0
- package/dist/hooks/core/tool-use-stash.js.map +1 -0
- 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 +315 -119
- 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 +3 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee CLI — Analytics Projection
|
|
3
|
+
*
|
|
4
|
+
* Projects a slice of host transcript JSONL lines into a delta
|
|
5
|
+
* `SessionAnalytics`. Operates on a slice (not the full file) so
|
|
6
|
+
* incremental projection is cheap; emits no content (privacy fence).
|
|
7
|
+
*
|
|
8
|
+
* Inputs:
|
|
9
|
+
* - parsed transcript lines (already JSON-parsed by transcript.ts)
|
|
10
|
+
* - `startingTurnIndex`: 1-based assistant message index for the FIRST
|
|
11
|
+
* assistant message in this slice. Used by the turn-bucket logic to
|
|
12
|
+
* assign global turn buckets across multiple incremental projections.
|
|
13
|
+
*
|
|
14
|
+
* Output: `DeltaAnalytics` — same shape as `AccumulatedAnalytics` plus
|
|
15
|
+
* delta-local signals merge needs (`has_assistant_with_usage`,
|
|
16
|
+
* `closing_pending_tool_uses`, `closing_current_turn`).
|
|
17
|
+
*
|
|
18
|
+
* Privacy: the function reads everything (Bash command body, Edit
|
|
19
|
+
* old_string/new_string, Write content, tool_result.content, user msg
|
|
20
|
+
* text for classifier keyword matching) but emits ONLY counts, categories,
|
|
21
|
+
* paths, timestamps, byte sizes, and boolean flags. No raw text leaves
|
|
22
|
+
* this function. Per-tool / per-category attribution operate on the
|
|
23
|
+
* read-once-locally pattern.
|
|
24
|
+
*/
|
|
25
|
+
import { CategoryStats, CurrentTurnState, DeltaAnalytics, PendingToolUse, SessionTurnAnalytics, SessionTurnStepAnalytics, TranscriptSource, TurnCategory, TurnEndReason } from "./types";
|
|
26
|
+
interface MessageUsage {
|
|
27
|
+
input_tokens?: number;
|
|
28
|
+
output_tokens?: number;
|
|
29
|
+
cache_creation_input_tokens?: number;
|
|
30
|
+
cache_read_input_tokens?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Anthropic's split of cache_creation tokens by ephemeral tier.
|
|
33
|
+
* `cache_creation_input_tokens` is the SUM of these. We track them
|
|
34
|
+
* separately so 1h cache writes (more expensive) get billed at the
|
|
35
|
+
* correct rate. Many real agent loop sessions are dominated by 1h.
|
|
36
|
+
*/
|
|
37
|
+
cache_creation?: {
|
|
38
|
+
ephemeral_5m_input_tokens?: number;
|
|
39
|
+
ephemeral_1h_input_tokens?: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Server-side tool use counts. `web_search_requests` is the only
|
|
43
|
+
* billable one currently — Anthropic charges $0.01 per request.
|
|
44
|
+
*/
|
|
45
|
+
server_tool_use?: {
|
|
46
|
+
web_search_requests?: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Speed tier for fast-mode pricing. `"fast"` triggers the Opus 4.6
|
|
50
|
+
* fast tier (6× regular Opus 4.5+ rate). Any other value or undefined
|
|
51
|
+
* falls back to the model's regular pricing.
|
|
52
|
+
*/
|
|
53
|
+
speed?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Sub-iteration usages for compound calls (e.g. `advisor` server tool).
|
|
56
|
+
* Each entry typed `"advisor_message"` represents an advisor sub-call
|
|
57
|
+
* whose tokens are NOT in the parent `usage` totals — they're billed
|
|
58
|
+
* separately at their own model's rate. We loop these and add per-iter
|
|
59
|
+
* cost to the unattributed bucket. Other iteration types (`"message"`)
|
|
60
|
+
* mirror the parent usage and are ignored to avoid double counting.
|
|
61
|
+
*/
|
|
62
|
+
iterations?: Array<{
|
|
63
|
+
type?: string;
|
|
64
|
+
model?: string;
|
|
65
|
+
input_tokens?: number;
|
|
66
|
+
output_tokens?: number;
|
|
67
|
+
cache_creation_input_tokens?: number;
|
|
68
|
+
cache_read_input_tokens?: number;
|
|
69
|
+
cache_creation?: {
|
|
70
|
+
ephemeral_5m_input_tokens?: number;
|
|
71
|
+
ephemeral_1h_input_tokens?: number;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
interface MessageBody {
|
|
76
|
+
content?: unknown;
|
|
77
|
+
usage?: MessageUsage;
|
|
78
|
+
/**
|
|
79
|
+
* Model identifier on assistant messages (e.g. `"claude-opus-4-7"`).
|
|
80
|
+
* Sub-agent / skill turns may run on a different model than the host
|
|
81
|
+
* conversation, so we count per-message rather than picking one label.
|
|
82
|
+
*/
|
|
83
|
+
model?: string;
|
|
84
|
+
/**
|
|
85
|
+
* Anthropic API message id (e.g. `"msg_01ABCdef..."`). Set on assistant
|
|
86
|
+
* messages by the API. Claude Code's transcript writer occasionally
|
|
87
|
+
* persists the same API response on multiple JSONL lines (different
|
|
88
|
+
* top-level `uuid`s but identical `message.id` + `requestId` + `usage`
|
|
89
|
+
* — likely stream finalization re-emit / per-tool_use re-serialization).
|
|
90
|
+
* Projection deduplicates by this field so a single API call counts
|
|
91
|
+
* once toward tokens / cost / per-tool attribution / step+turn opens.
|
|
92
|
+
* Without this, totals can be ~2x inflated on real sessions.
|
|
93
|
+
*/
|
|
94
|
+
id?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface RawTranscriptLine {
|
|
97
|
+
type?: string;
|
|
98
|
+
message?: MessageBody;
|
|
99
|
+
timestamp?: string;
|
|
100
|
+
/** Some Claude transcript versions include `cwd` on lines — currently unused. */
|
|
101
|
+
cwd?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Claude Code marks host-injected user messages (slash command bodies,
|
|
104
|
+
* Stop-hook feedback strings, etc.) with this top-level boolean. Real
|
|
105
|
+
* user prompts do not carry it. This is the structurally robust signal
|
|
106
|
+
* we use to skip these lines from `isHumanTextUser` so they don't open
|
|
107
|
+
* synthetic user_turns. Content-based detection (keyword sniffing) was
|
|
108
|
+
* the prior approach — it was fragile across Claude Code wrapper format
|
|
109
|
+
* changes; `isMeta` is part of the documented JSONL schema.
|
|
110
|
+
*/
|
|
111
|
+
isMeta?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Top-level Anthropic API request id (e.g. `"req_011CaYGn..."`). Set on
|
|
114
|
+
* SUCCESSFUL assistant lines by Claude Code. Verified absent on every
|
|
115
|
+
* `isApiErrorMessage:true` line (transcript-side: failure lines carry no
|
|
116
|
+
* join key back to the original API request).
|
|
117
|
+
*/
|
|
118
|
+
requestId?: string;
|
|
119
|
+
/**
|
|
120
|
+
* Top-level discriminator set on assistant lines representing a final
|
|
121
|
+
* API failure (after retry exhaustion). When `true`, `message.model` is
|
|
122
|
+
* `"<synthetic>"`, all `usage.*` token counts are zero, and the line
|
|
123
|
+
* carries `error` (and sometimes `apiErrorStatus`) at top level.
|
|
124
|
+
*/
|
|
125
|
+
isApiErrorMessage?: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Top-level error category on `isApiErrorMessage:true` lines. Observed
|
|
128
|
+
* values: `"rate_limit"` / `"authentication_failed"` / `"server_error"`
|
|
129
|
+
* / `"unknown"`. Absent on success lines.
|
|
130
|
+
*/
|
|
131
|
+
error?: string;
|
|
132
|
+
/**
|
|
133
|
+
* HTTP status code on `isApiErrorMessage:true` lines. Verified ~5%
|
|
134
|
+
* presence even on failure lines (only seen on explicit HTTP status
|
|
135
|
+
* errors like 429 rate-limit). Absent on success and most failures.
|
|
136
|
+
*/
|
|
137
|
+
apiErrorStatus?: number;
|
|
138
|
+
/**
|
|
139
|
+
* Per-line UUID generated by Claude Code at line-write time. Verified
|
|
140
|
+
* 100% presence across all assistant lines (success + failure). Used
|
|
141
|
+
* as the deterministic `Event.id` for the api_request wire event so
|
|
142
|
+
* re-projections of the same transcript bytes produce identical event
|
|
143
|
+
* ids → backend can dedupe on `(session_id, id)` for both success
|
|
144
|
+
* (where `request_id` is also available) and failure (where it isn't).
|
|
145
|
+
*/
|
|
146
|
+
uuid?: string;
|
|
147
|
+
}
|
|
148
|
+
export interface ProjectionInput {
|
|
149
|
+
/** The transcript lines we just parsed (only those with `parsed !== null` and matching shape are walked). */
|
|
150
|
+
lines: RawTranscriptLine[];
|
|
151
|
+
/** 1-based global turn index for the first assistant message in this slice. */
|
|
152
|
+
startingTurnIndex: number;
|
|
153
|
+
/** Used to set identity fields on the delta. */
|
|
154
|
+
sessionId: string;
|
|
155
|
+
/** Project name (basename of git root or project dir) — see `resolveProjectName` in `actions.ts`. */
|
|
156
|
+
projectName: string;
|
|
157
|
+
transcriptSource: TranscriptSource;
|
|
158
|
+
/**
|
|
159
|
+
* ms-since-epoch of the LAST assistant message seen in prior slices.
|
|
160
|
+
* Used to compute the user_response_times_ms gap to the first human-text
|
|
161
|
+
* user message of THIS slice. Pass `undefined` for the first ever slice.
|
|
162
|
+
*/
|
|
163
|
+
priorLastAssistantTsMs?: number;
|
|
164
|
+
/**
|
|
165
|
+
* Pending tool_uses carried over from prior slices (a tool_use emitted
|
|
166
|
+
* in slice K may have its tool_result / consumer in slice K+1 or K+2).
|
|
167
|
+
* Keyed by `tool_use.id`. Pass `undefined` / `{}` for the first slice
|
|
168
|
+
* or when no in-flight tools.
|
|
169
|
+
*/
|
|
170
|
+
priorPendingToolUses?: Record<string, PendingToolUse>;
|
|
171
|
+
/**
|
|
172
|
+
* ms-since-epoch of the most recent message timestamp seen across all
|
|
173
|
+
* prior slices (used to attribute the cross-slice gap to active vs
|
|
174
|
+
* idle: if THIS slice opens with a human-user message, the
|
|
175
|
+
* `firstMsg.ts - priorLastActivityTsMs` gap counts as user-idle).
|
|
176
|
+
*
|
|
177
|
+
* `undefined` for the first slice. Derived from
|
|
178
|
+
* `Date.parse(state.accumulated.last_activity_time)`.
|
|
179
|
+
*/
|
|
180
|
+
priorLastActivityTsMs?: number;
|
|
181
|
+
/**
|
|
182
|
+
* In-flight per-turn classifier state from the prior slice. The turn
|
|
183
|
+
* may have been opened by a human-user msg in a prior slice and is
|
|
184
|
+
* still accumulating signals. The new slice OR's in its own signals;
|
|
185
|
+
* the turn closes when the next human-user msg arrives.
|
|
186
|
+
*/
|
|
187
|
+
priorCurrentTurn?: CurrentTurnState;
|
|
188
|
+
/**
|
|
189
|
+
* Next turn_index to assign when a fresh turn opens. Carries the
|
|
190
|
+
* monotonic counter across slice boundaries. Defaults to 1 on the
|
|
191
|
+
* first slice. The projection consumes this seed and reports the
|
|
192
|
+
* post-walk value via `DeltaInternal.next_turn_index`.
|
|
193
|
+
*/
|
|
194
|
+
priorNextTurnIndex?: number;
|
|
195
|
+
/**
|
|
196
|
+
* Anthropic API message ids already counted in prior slices. The projection
|
|
197
|
+
* skips any assistant line whose `message.id` is in this set (or appears
|
|
198
|
+
* twice in the current slice) so a single API response counted once
|
|
199
|
+
* regardless of how many times the transcript writer persisted it.
|
|
200
|
+
* Reported back via `DeltaInternal.seen_assistant_message_ids` and merged
|
|
201
|
+
* into `state.internal.seen_assistant_message_ids` for cross-slice continuity.
|
|
202
|
+
*/
|
|
203
|
+
priorSeenAssistantMessageIds?: string[];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Deterministic turn id — `sha256(session_id|turn_index|start_time)`
|
|
207
|
+
* sliced to 16 hex chars. Re-emits of the same turn produce the same
|
|
208
|
+
* id, so backend LWW per `(session_id, turn_id)` is well-defined.
|
|
209
|
+
*/
|
|
210
|
+
/**
|
|
211
|
+
* Deterministic per-step identifier — `sha256(turn_id|step_index|start_time)`
|
|
212
|
+
* sliced to 16 hex chars. Same property as {@link deriveTurnId}: same
|
|
213
|
+
* inputs always map to the same id, so backend LWW per `(session_id,
|
|
214
|
+
* step_id)` is well-defined and re-emits are idempotent.
|
|
215
|
+
*/
|
|
216
|
+
export declare function deriveStepId(turnId: string, stepIndex: number, startTime: string): string;
|
|
217
|
+
export declare function deriveTurnId(sessionId: string, turnIndex: number, startTime: string): string;
|
|
218
|
+
/**
|
|
219
|
+
* Format a 32-char hex string into UUID-shaped layout (8-4-4-4-12). NOT
|
|
220
|
+
* RFC 4122-compliant (no version/variant bits) but matches the regex
|
|
221
|
+
* shape collectors expect for `Event.id`. Pure presentation — collisions
|
|
222
|
+
* impossible because the source hash space is the same 32 hex chars.
|
|
223
|
+
*/
|
|
224
|
+
export declare function formatHexAsUuid(hex32: string): string;
|
|
225
|
+
/**
|
|
226
|
+
* Deterministic Event.id for `session_analytics` wire records.
|
|
227
|
+
* `sha256("session_analytics:" + session_id + ":" + offset)`, formatted as
|
|
228
|
+
* UUID. Re-emits of the same `(session_id, offset)` produce the same id —
|
|
229
|
+
* backend treats them as updates to the same logical checkpoint:
|
|
230
|
+
* - First Stop @ offset=100 (`is_final=false`) → row inserted
|
|
231
|
+
* - SessionEnd @ offset=100 (carve-out, `is_final=true`) → ON CONFLICT update
|
|
232
|
+
* - Worker re-projects same slice after crash → ON CONFLICT update
|
|
233
|
+
* `snapshot_at` is intentionally NOT in the id — it's metadata for
|
|
234
|
+
* tiebreaking on collision (`UPDATE ... WHERE EXCLUDED.snapshot_at >=
|
|
235
|
+
* stored.snapshot_at`). This keeps `(session_id, id)` as a uniform dedup
|
|
236
|
+
* key across all analytics event types.
|
|
237
|
+
*/
|
|
238
|
+
export declare function deriveSessionAnalyticsEventId(sessionId: string, offset: number): string;
|
|
239
|
+
/**
|
|
240
|
+
* Deterministic Event.id for `session_turn_analytics` wire records.
|
|
241
|
+
* Derives from the turn's deterministic `turn_id` namespaced under the
|
|
242
|
+
* session — re-emits of the same turn produce the same Event.id.
|
|
243
|
+
*/
|
|
244
|
+
export declare function deriveTurnEventId(sessionId: string, turnId: string): string;
|
|
245
|
+
/**
|
|
246
|
+
* Deterministic Event.id for `session_turn_step_analytics` wire records.
|
|
247
|
+
* Same pattern as {@link deriveTurnEventId} — derives from the step's
|
|
248
|
+
* deterministic `step_id` namespaced under the session. Re-emits idempotent.
|
|
249
|
+
*/
|
|
250
|
+
export declare function deriveStepEventId(sessionId: string, stepId: string): string;
|
|
251
|
+
/**
|
|
252
|
+
* Options for {@link closeTurn} — bundles the projection-time identity
|
|
253
|
+
* fields + boundary metadata. Bundled into an object to keep the call
|
|
254
|
+
* sites readable (the alternative is a 7-positional-arg call).
|
|
255
|
+
*/
|
|
256
|
+
export interface CloseTurnOpts {
|
|
257
|
+
endTime: string;
|
|
258
|
+
endReason: TurnEndReason;
|
|
259
|
+
sessionId: string;
|
|
260
|
+
projectName: string;
|
|
261
|
+
transcriptSource: TranscriptSource;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Per-category-breakdown delta produced by closing one turn. Cleanly
|
|
265
|
+
* separable from the caller's accumulator state — caller applies via
|
|
266
|
+
* {@link applyBreakdownDelta} or its own merge logic. Keeps `closeTurn`
|
|
267
|
+
* a pure function with no input mutation.
|
|
268
|
+
*/
|
|
269
|
+
export interface CloseTurnResult {
|
|
270
|
+
category: TurnCategory;
|
|
271
|
+
turns_with_retry_inc: number;
|
|
272
|
+
one_shot_inc: number;
|
|
273
|
+
breakdown_delta: {
|
|
274
|
+
turns_inc: number;
|
|
275
|
+
turns_with_edit_inc: number;
|
|
276
|
+
total_retries_inc: number;
|
|
277
|
+
cost_usd_inc: number;
|
|
278
|
+
};
|
|
279
|
+
turn_event: SessionTurnAnalytics;
|
|
280
|
+
/**
|
|
281
|
+
* Per-step events for every step that ran in this turn, in
|
|
282
|
+
* `(turn_index, step_index)` order. The LAST entry carries
|
|
283
|
+
* `is_last_step=true` plus the turn-bookend fields
|
|
284
|
+
* (`turn_end_reason`, `turn_end_time`, `turn_duration`,
|
|
285
|
+
* `turn_category`, `turn_was_one_shot`, `turn_was_interrupted`)
|
|
286
|
+
* — backend reads `is_last_step=true` to know "this turn is now
|
|
287
|
+
* fully reconstructable from steps."
|
|
288
|
+
*
|
|
289
|
+
* Empty when the turn had no assistant message (defensive — should
|
|
290
|
+
* not happen in a normal transcript but we tolerate it).
|
|
291
|
+
*/
|
|
292
|
+
step_events: SessionTurnStepAnalytics[];
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Apply a {@link CloseTurnResult}'s `breakdown_delta` onto a category-
|
|
296
|
+
* breakdown map. Always WRITES A FRESH SLOT — never mutates the existing
|
|
297
|
+
* one in place. This decouples the post-merge mutation in emit.ts's
|
|
298
|
+
* finalize block from the slot-reference assumptions of any future
|
|
299
|
+
* `mergeCategoryBreakdown` refactor.
|
|
300
|
+
*/
|
|
301
|
+
export declare function applyBreakdownDelta(breakdown: Record<string, CategoryStats>, r: CloseTurnResult): void;
|
|
302
|
+
/**
|
|
303
|
+
* Close a turn — finalizes the per-turn record, runs the classifier,
|
|
304
|
+
* and produces a fully-built `SessionTurnAnalytics` for the wire plus
|
|
305
|
+
* the per-category breakdown delta the caller should apply.
|
|
306
|
+
*
|
|
307
|
+
* Pure function — does not mutate any input. `opts.endTime` is the
|
|
308
|
+
* closing event timestamp (next human-user msg, or session_end when
|
|
309
|
+
* finalizing). `opts.endReason` records which boundary fired so backend
|
|
310
|
+
* can distinguish normal turn ends from session-end forced closes.
|
|
311
|
+
*/
|
|
312
|
+
export declare function closeTurn(turn: CurrentTurnState, opts: CloseTurnOpts): CloseTurnResult;
|
|
313
|
+
export declare function projectDelta(input: ProjectionInput): DeltaAnalytics;
|
|
314
|
+
/** Exposed for the merge step + tests — the per-delta top-K map. */
|
|
315
|
+
export interface DeltaInternal {
|
|
316
|
+
file_path_change_counts: Record<string, number>;
|
|
317
|
+
distinct_file_paths_seen: string[];
|
|
318
|
+
/**
|
|
319
|
+
* ms-since-epoch of the LAST assistant message timestamp seen in this
|
|
320
|
+
* slice. Used by merge to update `internal.last_assistant_ts_ms` so the
|
|
321
|
+
* NEXT slice's projection can seed `priorLastAssistantTsMs` and compute
|
|
322
|
+
* cross-slice user-response-time gaps.
|
|
323
|
+
*/
|
|
324
|
+
last_assistant_ts_ms?: number;
|
|
325
|
+
/**
|
|
326
|
+
* Idle ms accumulated WITHIN this slice — sum of `(human_user.ts - prior.ts)`
|
|
327
|
+
* gaps. Includes the cross-slice gap when this slice opens with a
|
|
328
|
+
* human-user message and `priorLastActivityTsMs` was supplied. Merge
|
|
329
|
+
* adds this to `internal.idle_ms_total` and recomputes
|
|
330
|
+
* `accumulated.idle_minutes` + `accumulated.active_minutes`.
|
|
331
|
+
*/
|
|
332
|
+
idle_ms_delta?: number;
|
|
333
|
+
/**
|
|
334
|
+
* Post-walk value of the monotonic per-session turn index. Merge
|
|
335
|
+
* persists this into `state.internal.next_turn_index` so the next
|
|
336
|
+
* slice's projection seeds `priorNextTurnIndex` from it.
|
|
337
|
+
*/
|
|
338
|
+
next_turn_index?: number;
|
|
339
|
+
/**
|
|
340
|
+
* Anthropic message ids newly counted in THIS slice (not present in
|
|
341
|
+
* priorSeenAssistantMessageIds). Merge appends these to
|
|
342
|
+
* `state.internal.seen_assistant_message_ids` so the next slice can
|
|
343
|
+
* detect cross-slice duplicate API responses.
|
|
344
|
+
*/
|
|
345
|
+
new_assistant_message_ids?: string[];
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Re-walk the same lines to extract the per-delta internal aggregation
|
|
349
|
+
* fields (path→count map + distinct set + last assistant timestamp) the
|
|
350
|
+
* merge step needs to update `internal.*` on the state file. Kept separate
|
|
351
|
+
* so the wire-level `DeltaAnalytics` (sent through merge) doesn't carry
|
|
352
|
+
* these maps.
|
|
353
|
+
*/
|
|
354
|
+
export declare function projectDeltaInternal(input: ProjectionInput): DeltaInternal;
|
|
355
|
+
export {};
|
|
356
|
+
//# sourceMappingURL=projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../src/analytics/projection.ts"],"names":[],"mappings":"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"}
|