@ironbee-ai/cli 0.15.0 → 0.17.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 +8 -0
- package/dist/analytics/{emit.d.ts → claude/emit.d.ts} +1 -1
- package/dist/analytics/claude/emit.d.ts.map +1 -0
- package/dist/analytics/{emit.js → claude/emit.js} +34 -7
- package/dist/analytics/claude/emit.js.map +1 -0
- package/dist/analytics/{hook-trigger.d.ts → claude/hook-trigger.d.ts} +1 -1
- package/dist/analytics/claude/hook-trigger.d.ts.map +1 -0
- package/dist/analytics/{hook-trigger.js → claude/hook-trigger.js} +2 -2
- package/dist/analytics/claude/hook-trigger.js.map +1 -0
- package/dist/analytics/claude/log.d.ts.map +1 -0
- package/dist/analytics/{log.js → claude/log.js} +1 -1
- package/dist/analytics/claude/log.js.map +1 -0
- package/dist/analytics/{merge.d.ts → claude/merge.d.ts} +2 -1
- package/dist/analytics/claude/merge.d.ts.map +1 -0
- package/dist/analytics/{merge.js → claude/merge.js} +13 -1
- package/dist/analytics/claude/merge.js.map +1 -0
- package/dist/analytics/{pricing.d.ts → claude/pricing.d.ts} +1 -13
- package/dist/analytics/claude/pricing.d.ts.map +1 -0
- package/dist/analytics/{pricing.js → claude/pricing.js} +6 -14
- package/dist/analytics/claude/pricing.js.map +1 -0
- package/dist/analytics/{projection.d.ts → claude/projection.d.ts} +31 -7
- package/dist/analytics/claude/projection.d.ts.map +1 -0
- package/dist/analytics/{projection.js → claude/projection.js} +631 -327
- package/dist/analytics/claude/projection.js.map +1 -0
- package/dist/analytics/{spawn.d.ts → claude/spawn.d.ts} +4 -4
- package/dist/analytics/claude/spawn.d.ts.map +1 -0
- package/dist/analytics/{spawn.js → claude/spawn.js} +4 -3
- package/dist/analytics/claude/spawn.js.map +1 -0
- package/dist/analytics/{state.d.ts → claude/state.d.ts} +1 -1
- package/dist/analytics/claude/state.d.ts.map +1 -0
- package/dist/analytics/{state.js → claude/state.js} +2 -2
- package/dist/analytics/claude/state.js.map +1 -0
- package/dist/analytics/claude/transcript.d.ts.map +1 -0
- package/dist/analytics/{transcript.js → claude/transcript.js} +1 -1
- package/dist/analytics/claude/transcript.js.map +1 -0
- package/dist/analytics/codex/api-request.d.ts +108 -0
- package/dist/analytics/codex/api-request.d.ts.map +1 -0
- package/dist/analytics/codex/api-request.js +155 -0
- package/dist/analytics/codex/api-request.js.map +1 -0
- package/dist/analytics/codex/apply-patch.d.ts +21 -0
- package/dist/analytics/codex/apply-patch.d.ts.map +1 -0
- package/dist/analytics/codex/apply-patch.js +49 -0
- package/dist/analytics/codex/apply-patch.js.map +1 -0
- package/dist/analytics/codex/classifier.d.ts +28 -0
- package/dist/analytics/codex/classifier.d.ts.map +1 -0
- package/dist/analytics/codex/classifier.js +111 -0
- package/dist/analytics/codex/classifier.js.map +1 -0
- package/dist/analytics/codex/emit.d.ts +47 -0
- package/dist/analytics/codex/emit.d.ts.map +1 -0
- package/dist/analytics/codex/emit.js +158 -0
- package/dist/analytics/codex/emit.js.map +1 -0
- package/dist/analytics/codex/events-emit.d.ts +62 -0
- package/dist/analytics/codex/events-emit.d.ts.map +1 -0
- package/dist/analytics/codex/events-emit.js +555 -0
- package/dist/analytics/codex/events-emit.js.map +1 -0
- package/dist/analytics/codex/pricing.d.ts +57 -0
- package/dist/analytics/codex/pricing.d.ts.map +1 -0
- package/dist/analytics/codex/pricing.js +125 -0
- package/dist/analytics/codex/pricing.js.map +1 -0
- package/dist/analytics/codex/projection.d.ts +51 -0
- package/dist/analytics/codex/projection.d.ts.map +1 -0
- package/dist/analytics/codex/projection.js +1477 -0
- package/dist/analytics/codex/projection.js.map +1 -0
- package/dist/analytics/codex/spawn.d.ts +27 -0
- package/dist/analytics/codex/spawn.d.ts.map +1 -0
- package/dist/analytics/codex/spawn.js +64 -0
- package/dist/analytics/codex/spawn.js.map +1 -0
- package/dist/analytics/codex/status-snapshot.d.ts +80 -0
- package/dist/analytics/codex/status-snapshot.d.ts.map +1 -0
- package/dist/analytics/codex/status-snapshot.js +206 -0
- package/dist/analytics/codex/status-snapshot.js.map +1 -0
- package/dist/analytics/codex/transcript.d.ts +51 -0
- package/dist/analytics/codex/transcript.d.ts.map +1 -0
- package/dist/analytics/codex/transcript.js +134 -0
- package/dist/analytics/codex/transcript.js.map +1 -0
- package/dist/analytics/codex/types.d.ts +253 -0
- package/dist/analytics/codex/types.d.ts.map +1 -0
- package/dist/analytics/codex/types.js +29 -0
- package/dist/analytics/codex/types.js.map +1 -0
- package/dist/analytics/shared/classifier.d.ts.map +1 -0
- package/dist/analytics/{classifier.js → shared/classifier.js} +9 -0
- package/dist/analytics/shared/classifier.js.map +1 -0
- package/dist/analytics/shared/errors.d.ts.map +1 -0
- package/dist/analytics/shared/errors.js.map +1 -0
- package/dist/analytics/shared/tokens.d.ts +14 -0
- package/dist/analytics/shared/tokens.d.ts.map +1 -0
- package/dist/analytics/shared/tokens.js +17 -0
- package/dist/analytics/shared/tokens.js.map +1 -0
- package/dist/analytics/{types.d.ts → shared/types.d.ts} +42 -9
- package/dist/analytics/shared/types.d.ts.map +1 -0
- package/dist/analytics/shared/types.js.map +1 -0
- package/dist/clients/base.d.ts +26 -4
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/hooks/activity-end.js +1 -1
- package/dist/clients/claude/hooks/activity-end.js.map +1 -1
- package/dist/clients/claude/hooks/activity-start.js +1 -1
- package/dist/clients/claude/hooks/activity-start.js.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +20 -1
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts +8 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +9 -2
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verification.d.ts +10 -1
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verification.js +34 -6
- 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 +7 -1
- 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 +7 -1
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-status.js +13 -9
- package/dist/clients/claude/hooks/session-status.js.map +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +26 -1
- 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 +8 -1
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts +7 -2
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +72 -32
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/util.d.ts.map +1 -1
- package/dist/clients/claude/util.js +55 -0
- package/dist/clients/claude/util.js.map +1 -1
- package/dist/clients/codex/commands/ironbee-verify/SKILL.md +58 -0
- package/dist/clients/codex/hooks/activity-end.d.ts +9 -0
- package/dist/clients/codex/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/codex/hooks/activity-end.js +65 -0
- package/dist/clients/codex/hooks/activity-end.js.map +1 -0
- package/dist/clients/codex/hooks/activity-start.d.ts +17 -0
- package/dist/clients/codex/hooks/activity-start.d.ts.map +1 -0
- package/dist/clients/codex/hooks/activity-start.js +38 -0
- package/dist/clients/codex/hooks/activity-start.js.map +1 -0
- package/dist/clients/codex/hooks/clear-verdict.d.ts +55 -0
- package/dist/clients/codex/hooks/clear-verdict.d.ts.map +1 -0
- package/dist/clients/codex/hooks/clear-verdict.js +303 -0
- package/dist/clients/codex/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts +36 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.js +115 -0
- package/dist/clients/codex/hooks/require-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verification.d.ts +20 -0
- package/dist/clients/codex/hooks/require-verification.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verification.js +156 -0
- package/dist/clients/codex/hooks/require-verification.js.map +1 -0
- package/dist/clients/codex/hooks/session-start.d.ts +10 -0
- package/dist/clients/codex/hooks/session-start.d.ts.map +1 -0
- package/dist/clients/codex/hooks/session-start.js +94 -0
- package/dist/clients/codex/hooks/session-start.js.map +1 -0
- package/dist/clients/codex/hooks/track-action-monitor.d.ts +10 -0
- package/dist/clients/codex/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action-monitor.js +168 -0
- package/dist/clients/codex/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/codex/hooks/track-action-pre.d.ts +18 -0
- package/dist/clients/codex/hooks/track-action-pre.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action-pre.js +35 -0
- package/dist/clients/codex/hooks/track-action-pre.js.map +1 -0
- package/dist/clients/codex/hooks/track-action.d.ts +22 -0
- package/dist/clients/codex/hooks/track-action.d.ts.map +1 -0
- package/dist/clients/codex/hooks/track-action.js +350 -0
- package/dist/clients/codex/hooks/track-action.js.map +1 -0
- package/dist/clients/codex/hooks/verify-gate.d.ts +15 -0
- package/dist/clients/codex/hooks/verify-gate.d.ts.map +1 -0
- package/dist/clients/codex/hooks/verify-gate.js +105 -0
- package/dist/clients/codex/hooks/verify-gate.js.map +1 -0
- package/dist/clients/codex/index.d.ts +52 -0
- package/dist/clients/codex/index.d.ts.map +1 -0
- package/dist/clients/codex/index.js +463 -0
- package/dist/clients/codex/index.js.map +1 -0
- package/dist/clients/codex/platforms/command-verify.backend.md +108 -0
- package/dist/clients/codex/platforms/command-verify.browser.md +108 -0
- package/dist/clients/codex/platforms/command-verify.node.md +61 -0
- package/dist/clients/codex/platforms/rule.backend.md +32 -0
- package/dist/clients/codex/platforms/rule.browser.md +17 -0
- package/dist/clients/codex/platforms/rule.node.md +28 -0
- package/dist/clients/codex/platforms/skill.backend.md +95 -0
- package/dist/clients/codex/platforms/skill.browser.md +28 -0
- package/dist/clients/codex/platforms/skill.node.md +62 -0
- package/dist/clients/codex/rules/ironbee-verification.md +48 -0
- package/dist/clients/codex/skills/ironbee-verification.md +80 -0
- package/dist/clients/codex/util.d.ts +193 -0
- package/dist/clients/codex/util.d.ts.map +1 -0
- package/dist/clients/codex/util.js +784 -0
- package/dist/clients/codex/util.js.map +1 -0
- package/dist/clients/cursor/hooks/activity-end.js +1 -1
- package/dist/clients/cursor/hooks/activity-end.js.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.d.ts +5 -2
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +16 -4
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts +7 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +8 -2
- package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.d.ts +8 -1
- package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.js +27 -6
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.js +1 -1
- package/dist/clients/cursor/hooks/session-end.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +6 -1
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts +7 -2
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +69 -30
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +2 -1
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/{claude.d.ts → claude/index.d.ts} +1 -1
- package/dist/commands/claude/index.d.ts.map +1 -0
- package/dist/commands/{claude.js → claude/index.js} +12 -6
- package/dist/commands/claude/index.js.map +1 -0
- package/dist/commands/{otel.d.ts → claude/otel.d.ts} +5 -1
- package/dist/commands/claude/otel.d.ts.map +1 -0
- package/dist/commands/{otel.js → claude/otel.js} +9 -5
- package/dist/commands/claude/otel.js.map +1 -0
- package/dist/commands/claude/process-analytics.d.ts +19 -0
- package/dist/commands/claude/process-analytics.d.ts.map +1 -0
- package/dist/commands/{process-analytics.js → claude/process-analytics.js} +16 -15
- package/dist/commands/claude/process-analytics.js.map +1 -0
- package/dist/commands/{statusline-toggle.d.ts → claude/statusline-toggle.d.ts} +2 -2
- package/dist/commands/claude/statusline-toggle.d.ts.map +1 -0
- package/dist/commands/{statusline-toggle.js → claude/statusline-toggle.js} +8 -8
- package/dist/commands/claude/statusline-toggle.js.map +1 -0
- package/dist/commands/{statusline.d.ts → claude/statusline.d.ts} +1 -1
- package/dist/commands/claude/statusline.d.ts.map +1 -0
- package/dist/commands/{statusline.js → claude/statusline.js} +4 -4
- package/dist/commands/claude/statusline.js.map +1 -0
- package/dist/commands/codex/index.d.ts +11 -0
- package/dist/commands/codex/index.d.ts.map +1 -0
- package/dist/commands/codex/index.js +17 -0
- package/dist/commands/codex/index.js.map +1 -0
- package/dist/commands/codex/process-analytics.d.ts +14 -0
- package/dist/commands/codex/process-analytics.d.ts.map +1 -0
- package/dist/commands/codex/process-analytics.js +111 -0
- package/dist/commands/codex/process-analytics.js.map +1 -0
- package/dist/commands/hook.js +16 -2
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import.js +3 -3
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/queue.js +3 -1
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/verification-toggle.d.ts +19 -0
- package/dist/commands/verification-toggle.d.ts.map +1 -1
- package/dist/commands/verification-toggle.js +88 -5
- package/dist/commands/verification-toggle.js.map +1 -1
- package/dist/commands/verification.d.ts +3 -0
- package/dist/commands/verification.d.ts.map +1 -1
- package/dist/commands/verification.js +34 -3
- package/dist/commands/verification.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +17 -1
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +13 -0
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/activity-end.d.ts +8 -0
- package/dist/hooks/core/activity-end.d.ts.map +1 -1
- package/dist/hooks/core/activity-end.js +19 -0
- package/dist/hooks/core/activity-end.js.map +1 -1
- package/dist/hooks/core/session-state.d.ts +15 -1
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +102 -7
- 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 +29 -17
- package/dist/hooks/core/submit-verdict.js.map +1 -1
- package/dist/hooks/core/verification-lifecycle.d.ts +20 -0
- package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -1
- package/dist/hooks/core/verification-lifecycle.js +41 -0
- package/dist/hooks/core/verification-lifecycle.js.map +1 -1
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +11 -5
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/import/claude/analytics-runner.d.ts +1 -1
- package/dist/import/claude/analytics-runner.d.ts.map +1 -1
- package/dist/import/claude/analytics-runner.js +5 -5
- package/dist/import/claude/analytics-runner.js.map +1 -1
- package/dist/import/claude/auth-mode.d.ts +1 -1
- package/dist/import/claude/auth-mode.d.ts.map +1 -1
- package/dist/import/claude/discovery.js +1 -1
- package/dist/import/claude/discovery.js.map +1 -1
- package/dist/import/claude/encoding.js +1 -1
- package/dist/import/claude/encoding.js.map +1 -1
- package/dist/import/claude/events/file-change.d.ts +10 -1
- package/dist/import/claude/events/file-change.d.ts.map +1 -1
- package/dist/import/claude/events/file-change.js +79 -5
- package/dist/import/claude/events/file-change.js.map +1 -1
- package/dist/import/claude/events/tool-call.d.ts +16 -1
- package/dist/import/claude/events/tool-call.d.ts.map +1 -1
- package/dist/import/claude/events/tool-call.js +122 -15
- package/dist/import/claude/events/tool-call.js.map +1 -1
- package/dist/import/claude/runner.d.ts.map +1 -1
- package/dist/import/claude/runner.js +45 -3
- package/dist/import/claude/runner.js.map +1 -1
- package/dist/import/claude/summary.js +1 -1
- package/dist/import/claude/summary.js.map +1 -1
- package/dist/import/claude/transcript-walk.d.ts +1 -1
- package/dist/import/claude/transcript-walk.d.ts.map +1 -1
- package/dist/import/claude/transcript-walk.js +11 -4
- package/dist/import/claude/transcript-walk.js.map +1 -1
- package/dist/import/codex/analytics-runner.d.ts +46 -0
- package/dist/import/codex/analytics-runner.d.ts.map +1 -0
- package/dist/import/codex/analytics-runner.js +116 -0
- package/dist/import/codex/analytics-runner.js.map +1 -0
- package/dist/import/codex/discovery.d.ts +33 -0
- package/dist/import/codex/discovery.d.ts.map +1 -0
- package/dist/import/codex/discovery.js +202 -0
- package/dist/import/codex/discovery.js.map +1 -0
- package/dist/import/codex/events/file-change.d.ts +42 -0
- package/dist/import/codex/events/file-change.d.ts.map +1 -0
- package/dist/import/codex/events/file-change.js +125 -0
- package/dist/import/codex/events/file-change.js.map +1 -0
- package/dist/import/codex/events/tool-call.d.ts +49 -0
- package/dist/import/codex/events/tool-call.d.ts.map +1 -0
- package/dist/import/codex/events/tool-call.js +151 -0
- package/dist/import/codex/events/tool-call.js.map +1 -0
- package/dist/import/codex/runner.d.ts +34 -0
- package/dist/import/codex/runner.d.ts.map +1 -0
- package/dist/import/codex/runner.js +456 -0
- package/dist/import/codex/runner.js.map +1 -0
- package/dist/import/codex/summary.d.ts +20 -0
- package/dist/import/codex/summary.d.ts.map +1 -0
- package/dist/import/codex/summary.js +206 -0
- package/dist/import/codex/summary.js.map +1 -0
- package/dist/import/events/activity.d.ts.map +1 -1
- package/dist/import/events/activity.js +17 -2
- package/dist/import/events/activity.js.map +1 -1
- package/dist/import/events/session.d.ts +11 -1
- package/dist/import/events/session.d.ts.map +1 -1
- package/dist/import/events/session.js +19 -1
- package/dist/import/events/session.js.map +1 -1
- package/dist/import/ids.js +3 -3
- package/dist/import/ids.js.map +1 -1
- package/dist/import/pipeline.d.ts +22 -15
- package/dist/import/pipeline.d.ts.map +1 -1
- package/dist/import/pipeline.js +99 -18
- package/dist/import/pipeline.js.map +1 -1
- package/dist/import/types.d.ts +4 -0
- package/dist/import/types.d.ts.map +1 -1
- package/dist/import/types.js.map +1 -1
- package/dist/index.js +9 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/collector.d.ts +2 -1
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +28 -3
- package/dist/lib/collector.js.map +1 -1
- package/dist/lib/config.d.ts +40 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +52 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/event.d.ts +18 -1
- package/dist/lib/event.d.ts.map +1 -1
- package/dist/lib/event.js +25 -1
- package/dist/lib/event.js.map +1 -1
- package/dist/lib/platform-section.d.ts.map +1 -1
- package/dist/lib/platform-section.js +8 -0
- package/dist/lib/platform-section.js.map +1 -1
- package/dist/otel/{context → claude/context}/build.d.ts +1 -1
- package/dist/otel/claude/context/build.d.ts.map +1 -0
- package/dist/otel/{context → claude/context}/build.js +3 -7
- package/dist/otel/claude/context/build.js.map +1 -0
- package/dist/otel/claude/context/classify.d.ts.map +1 -0
- package/dist/otel/claude/context/classify.js.map +1 -0
- package/dist/otel/{context → claude/context}/extract.d.ts +1 -1
- package/dist/otel/claude/context/extract.d.ts.map +1 -0
- package/dist/otel/claude/context/extract.js.map +1 -0
- package/dist/otel/claude/context/markers.d.ts.map +1 -0
- package/dist/otel/{context → claude/context}/markers.js +22 -3
- package/dist/otel/claude/context/markers.js.map +1 -0
- package/dist/otel/claude/context/util.d.ts.map +1 -0
- package/dist/otel/claude/context/util.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/ensure.d.ts +1 -1
- package/dist/otel/claude/daemon/ensure.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/ensure.js +6 -6
- package/dist/otel/claude/daemon/ensure.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/forward.d.ts +1 -1
- package/dist/otel/claude/daemon/forward.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/forward.js +0 -0
- package/dist/otel/claude/daemon/forward.js.map +1 -0
- package/dist/otel/claude/daemon/paths.d.ts.map +1 -0
- package/dist/otel/claude/daemon/paths.js.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/process.d.ts +1 -1
- package/dist/otel/claude/daemon/process.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/process.js +1 -1
- package/dist/otel/claude/daemon/process.js.map +1 -0
- package/dist/otel/claude/daemon/reprocess.d.ts.map +1 -0
- package/dist/otel/{daemon → claude/daemon}/reprocess.js +2 -2
- package/dist/otel/claude/daemon/reprocess.js.map +1 -0
- package/dist/otel/claude/log-handler.d.ts.map +1 -0
- package/dist/otel/{log-handler.js → claude/log-handler.js} +1 -1
- package/dist/otel/claude/log-handler.js.map +1 -0
- package/dist/otel/collector.js +4 -4
- package/dist/otel/collector.js.map +1 -1
- package/dist/queue/flush.d.ts +23 -0
- package/dist/queue/flush.d.ts.map +1 -1
- package/dist/queue/flush.js +44 -0
- 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 +5 -4
- package/dist/queue/handlers/send-event.js.map +1 -1
- package/dist/queue/index.d.ts +2 -2
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +4 -1
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/spawn.d.ts +20 -0
- package/dist/queue/spawn.d.ts.map +1 -1
- package/dist/queue/spawn.js +37 -0
- package/dist/queue/spawn.js.map +1 -1
- package/dist/tui/config/schema.d.ts.map +1 -1
- package/dist/tui/config/schema.js +8 -0
- package/dist/tui/config/schema.js.map +1 -1
- package/dist/tui/import/area.js +3 -3
- package/dist/tui/import/area.js.map +1 -1
- package/package.json +2 -1
- package/dist/analytics/classifier.d.ts.map +0 -1
- package/dist/analytics/classifier.js.map +0 -1
- package/dist/analytics/emit.d.ts.map +0 -1
- package/dist/analytics/emit.js.map +0 -1
- package/dist/analytics/errors.d.ts.map +0 -1
- package/dist/analytics/errors.js.map +0 -1
- package/dist/analytics/hook-trigger.d.ts.map +0 -1
- package/dist/analytics/hook-trigger.js.map +0 -1
- package/dist/analytics/log.d.ts.map +0 -1
- package/dist/analytics/log.js.map +0 -1
- package/dist/analytics/merge.d.ts.map +0 -1
- package/dist/analytics/merge.js.map +0 -1
- package/dist/analytics/pricing.d.ts.map +0 -1
- package/dist/analytics/pricing.js.map +0 -1
- package/dist/analytics/projection.d.ts.map +0 -1
- package/dist/analytics/projection.js.map +0 -1
- package/dist/analytics/spawn.d.ts.map +0 -1
- package/dist/analytics/spawn.js.map +0 -1
- package/dist/analytics/state.d.ts.map +0 -1
- package/dist/analytics/state.js.map +0 -1
- package/dist/analytics/transcript.d.ts.map +0 -1
- package/dist/analytics/transcript.js.map +0 -1
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js.map +0 -1
- package/dist/commands/claude.d.ts.map +0 -1
- package/dist/commands/claude.js.map +0 -1
- package/dist/commands/otel.d.ts.map +0 -1
- package/dist/commands/otel.js.map +0 -1
- package/dist/commands/process-analytics.d.ts +0 -18
- package/dist/commands/process-analytics.d.ts.map +0 -1
- package/dist/commands/process-analytics.js.map +0 -1
- package/dist/commands/statusline-toggle.d.ts.map +0 -1
- package/dist/commands/statusline-toggle.js.map +0 -1
- package/dist/commands/statusline.d.ts.map +0 -1
- package/dist/commands/statusline.js.map +0 -1
- package/dist/otel/context/build.d.ts.map +0 -1
- package/dist/otel/context/build.js.map +0 -1
- package/dist/otel/context/classify.d.ts.map +0 -1
- package/dist/otel/context/classify.js.map +0 -1
- package/dist/otel/context/extract.d.ts.map +0 -1
- package/dist/otel/context/extract.js.map +0 -1
- package/dist/otel/context/markers.d.ts.map +0 -1
- package/dist/otel/context/markers.js.map +0 -1
- package/dist/otel/context/util.d.ts.map +0 -1
- package/dist/otel/context/util.js.map +0 -1
- package/dist/otel/daemon/ensure.d.ts.map +0 -1
- package/dist/otel/daemon/ensure.js.map +0 -1
- package/dist/otel/daemon/forward.d.ts.map +0 -1
- package/dist/otel/daemon/forward.js.map +0 -1
- package/dist/otel/daemon/paths.d.ts.map +0 -1
- package/dist/otel/daemon/paths.js.map +0 -1
- package/dist/otel/daemon/process.d.ts.map +0 -1
- package/dist/otel/daemon/process.js.map +0 -1
- package/dist/otel/daemon/reprocess.d.ts.map +0 -1
- package/dist/otel/daemon/reprocess.js.map +0 -1
- package/dist/otel/log-handler.d.ts.map +0 -1
- package/dist/otel/log-handler.js.map +0 -1
- /package/dist/analytics/{log.d.ts → claude/log.d.ts} +0 -0
- /package/dist/analytics/{transcript.d.ts → claude/transcript.d.ts} +0 -0
- /package/dist/analytics/{classifier.d.ts → shared/classifier.d.ts} +0 -0
- /package/dist/analytics/{errors.d.ts → shared/errors.d.ts} +0 -0
- /package/dist/analytics/{errors.js → shared/errors.js} +0 -0
- /package/dist/analytics/{types.js → shared/types.js} +0 -0
- /package/dist/otel/{context → claude/context}/classify.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/classify.js +0 -0
- /package/dist/otel/{context → claude/context}/extract.js +0 -0
- /package/dist/otel/{context → claude/context}/markers.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/util.d.ts +0 -0
- /package/dist/otel/{context → claude/context}/util.js +0 -0
- /package/dist/otel/{daemon → claude/daemon}/paths.d.ts +0 -0
- /package/dist/otel/{daemon → claude/daemon}/paths.js +0 -0
- /package/dist/otel/{daemon → claude/daemon}/reprocess.d.ts +0 -0
- /package/dist/otel/{log-handler.d.ts → claude/log-handler.d.ts} +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex `apply_patch` tool — wrapper around the parser already implemented
|
|
4
|
+
* for the `clear-verdict` hook. Analytics derives code_changes metrics
|
|
5
|
+
* (files_modified / lines_added / lines_removed) by parsing apply_patch
|
|
6
|
+
* function_call arguments.
|
|
7
|
+
*
|
|
8
|
+
* Keeping a thin wrapper here so analytics never imports from the hook
|
|
9
|
+
* adapter layer directly — keeps `src/analytics/` host-agnostic.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.parseApplyPatchBody = void 0;
|
|
13
|
+
exports.extractApplyPatchBody = extractApplyPatchBody;
|
|
14
|
+
const clear_verdict_1 = require("../../clients/codex/hooks/clear-verdict");
|
|
15
|
+
Object.defineProperty(exports, "parseApplyPatchBody", { enumerable: true, get: function () { return clear_verdict_1.parseApplyPatchBody; } });
|
|
16
|
+
/**
|
|
17
|
+
* Extract the patch body string from an `apply_patch` function_call's
|
|
18
|
+
* `arguments` JSON. Codex's wire shape is `{"input": "<patch text>"}`
|
|
19
|
+
* (custom_tool_call form — verified live on 0.135.0).
|
|
20
|
+
*
|
|
21
|
+
* Returns null when the shape doesn't match (e.g. tool renamed, args
|
|
22
|
+
* malformed, body missing). Caller should skip code_changes derivation.
|
|
23
|
+
*/
|
|
24
|
+
function extractApplyPatchBody(argumentsJson) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(argumentsJson);
|
|
27
|
+
if (parsed !== null && typeof parsed === "object") {
|
|
28
|
+
const obj = parsed;
|
|
29
|
+
const input = obj.input;
|
|
30
|
+
if (typeof input === "string" && input.length > 0) {
|
|
31
|
+
return input;
|
|
32
|
+
}
|
|
33
|
+
// Some Codex variants use "patch" or top-level "command"
|
|
34
|
+
const patch = obj.patch;
|
|
35
|
+
if (typeof patch === "string" && patch.length > 0) {
|
|
36
|
+
return patch;
|
|
37
|
+
}
|
|
38
|
+
const command = obj.command;
|
|
39
|
+
if (typeof command === "string" && command.length > 0) {
|
|
40
|
+
return command;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// fall through
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=apply-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-patch.js","sourceRoot":"","sources":["../../../src/analytics/codex/apply-patch.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAcH,sDAuBC;AAnCD,2EAA8F;AAErF,oGAFA,mCAAmB,OAEA;AAE5B;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,aAAqB;IACvD,IAAI,CAAC;QACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,GAAG,GAA4B,MAAiC,CAAC;YACvE,MAAM,KAAK,GAAY,GAAG,CAAC,KAAK,CAAC;YACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,yDAAyD;YACzD,MAAM,KAAK,GAAY,GAAG,CAAC,KAAK,CAAC;YACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,MAAM,OAAO,GAAY,GAAG,CAAC,OAAO,CAAC;YACrC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,OAAO,OAAO,CAAC;YACnB,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,eAAe;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex turn classifier — maps the dominant `function_call.name`s in a turn
|
|
3
|
+
* to one of IronBee's analytics categories. Mirrors the Claude classifier
|
|
4
|
+
* pattern but Codex tool names differ:
|
|
5
|
+
* - Claude: Bash, Read, Write, Edit, Grep, Glob, Task, WebFetch, ...
|
|
6
|
+
* - Codex: exec_command (Bash equivalent), apply_patch, update_plan,
|
|
7
|
+
* mcp__*-devtools__* (verification), other MCP tools
|
|
8
|
+
*
|
|
9
|
+
* Returns the same category vocabulary the Claude side uses so dashboards
|
|
10
|
+
* stay uniform: "coding" / "verification" / "shell" / "planning" /
|
|
11
|
+
* "research" / "filesystem" / "other".
|
|
12
|
+
*/
|
|
13
|
+
export type CodexTurnCategory = "coding" | "verification" | "shell" | "planning" | "research" | "filesystem" | "other";
|
|
14
|
+
/**
|
|
15
|
+
* Classify a single tool name. `null` returns "other" — caller may decide
|
|
16
|
+
* a turn-level category from per-tool counts.
|
|
17
|
+
*/
|
|
18
|
+
export declare function classifyCodexToolName(name: string | null | undefined): CodexTurnCategory;
|
|
19
|
+
/**
|
|
20
|
+
* Determine the dominant category for a turn given counts per tool. Returns
|
|
21
|
+
* the category with the highest tool-call count; ties broken by the
|
|
22
|
+
* priority order embedded in the switch fallthrough (verification beats
|
|
23
|
+
* coding beats planning beats shell beats research beats filesystem).
|
|
24
|
+
*
|
|
25
|
+
* Returns "other" when no tools were called.
|
|
26
|
+
*/
|
|
27
|
+
export declare function dominantCodexTurnCategory(toolCounts: Record<string, number>): CodexTurnCategory;
|
|
28
|
+
//# sourceMappingURL=classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../../src/analytics/codex/classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,iBAAiB,GACvB,QAAQ,GACR,cAAc,GACd,OAAO,GACP,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OAAO,CAAC;AAEd;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAiDxF;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,CA+B/F"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex turn classifier — maps the dominant `function_call.name`s in a turn
|
|
4
|
+
* to one of IronBee's analytics categories. Mirrors the Claude classifier
|
|
5
|
+
* pattern but Codex tool names differ:
|
|
6
|
+
* - Claude: Bash, Read, Write, Edit, Grep, Glob, Task, WebFetch, ...
|
|
7
|
+
* - Codex: exec_command (Bash equivalent), apply_patch, update_plan,
|
|
8
|
+
* mcp__*-devtools__* (verification), other MCP tools
|
|
9
|
+
*
|
|
10
|
+
* Returns the same category vocabulary the Claude side uses so dashboards
|
|
11
|
+
* stay uniform: "coding" / "verification" / "shell" / "planning" /
|
|
12
|
+
* "research" / "filesystem" / "other".
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.classifyCodexToolName = classifyCodexToolName;
|
|
16
|
+
exports.dominantCodexTurnCategory = dominantCodexTurnCategory;
|
|
17
|
+
/**
|
|
18
|
+
* Classify a single tool name. `null` returns "other" — caller may decide
|
|
19
|
+
* a turn-level category from per-tool counts.
|
|
20
|
+
*/
|
|
21
|
+
function classifyCodexToolName(name) {
|
|
22
|
+
if (!name) {
|
|
23
|
+
return "other";
|
|
24
|
+
}
|
|
25
|
+
if (name === "apply_patch") {
|
|
26
|
+
return "coding";
|
|
27
|
+
}
|
|
28
|
+
if (name === "update_plan") {
|
|
29
|
+
return "planning";
|
|
30
|
+
}
|
|
31
|
+
if (name === "exec_command" || name === "Bash") {
|
|
32
|
+
return "shell";
|
|
33
|
+
}
|
|
34
|
+
// Codex 0.135+ `write_stdin` writes characters into an open
|
|
35
|
+
// exec_command session's stdin (REPL prompts, interactive CLI flows).
|
|
36
|
+
// Semantically a shell-IO continuation of exec_command, so bucket
|
|
37
|
+
// alongside it; without this branch every write_stdin call falls
|
|
38
|
+
// through to "other" and the turn-category histogram understates
|
|
39
|
+
// shell-driven verification on sessions that drive REPLs.
|
|
40
|
+
if (name === "write_stdin") {
|
|
41
|
+
return "shell";
|
|
42
|
+
}
|
|
43
|
+
if (name === "read_file" || name === "list_dir" || name === "glob") {
|
|
44
|
+
return "filesystem";
|
|
45
|
+
}
|
|
46
|
+
// Codex 0.135+ `view_image` reads an image file from disk for visual
|
|
47
|
+
// inspection (screenshots, diagrams). Same filesystem-read semantic
|
|
48
|
+
// as `read_file` — without this branch every view_image call lands
|
|
49
|
+
// in "other", under-attributing visual-verification turns to
|
|
50
|
+
// filesystem-explore activity.
|
|
51
|
+
if (name === "view_image") {
|
|
52
|
+
return "filesystem";
|
|
53
|
+
}
|
|
54
|
+
if (name === "web_search" || name === "web_fetch") {
|
|
55
|
+
return "research";
|
|
56
|
+
}
|
|
57
|
+
// MCP devtools tools belong to verification regardless of cycle.
|
|
58
|
+
// BOTH wire shapes: `mcp__<server>__<tool>` (hook stdin) and bare
|
|
59
|
+
// `bdt_*` / `ndt_*` / `bedt_*` (rollout JSONL — empirically the
|
|
60
|
+
// dominant case). Without bare-prefix detection, every Codex session
|
|
61
|
+
// that ran browser/node/backend MCP tools reports zero "verification"
|
|
62
|
+
// category turns even when all the agent did was verify.
|
|
63
|
+
if (/^mcp__(?:browser|node|backend)[-_]devtools__/.test(name)) {
|
|
64
|
+
return "verification";
|
|
65
|
+
}
|
|
66
|
+
if (/^(bdt|ndt|bedt)_/.test(name)) {
|
|
67
|
+
return "verification";
|
|
68
|
+
}
|
|
69
|
+
return "other";
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Determine the dominant category for a turn given counts per tool. Returns
|
|
73
|
+
* the category with the highest tool-call count; ties broken by the
|
|
74
|
+
* priority order embedded in the switch fallthrough (verification beats
|
|
75
|
+
* coding beats planning beats shell beats research beats filesystem).
|
|
76
|
+
*
|
|
77
|
+
* Returns "other" when no tools were called.
|
|
78
|
+
*/
|
|
79
|
+
function dominantCodexTurnCategory(toolCounts) {
|
|
80
|
+
const tally = {
|
|
81
|
+
coding: 0,
|
|
82
|
+
verification: 0,
|
|
83
|
+
shell: 0,
|
|
84
|
+
planning: 0,
|
|
85
|
+
research: 0,
|
|
86
|
+
filesystem: 0,
|
|
87
|
+
other: 0,
|
|
88
|
+
};
|
|
89
|
+
for (const [name, count] of Object.entries(toolCounts)) {
|
|
90
|
+
tally[classifyCodexToolName(name)] += count;
|
|
91
|
+
}
|
|
92
|
+
let best = "other";
|
|
93
|
+
let bestCount = 0;
|
|
94
|
+
const priority = [
|
|
95
|
+
"verification",
|
|
96
|
+
"coding",
|
|
97
|
+
"planning",
|
|
98
|
+
"shell",
|
|
99
|
+
"research",
|
|
100
|
+
"filesystem",
|
|
101
|
+
"other",
|
|
102
|
+
];
|
|
103
|
+
for (const cat of priority) {
|
|
104
|
+
if (tally[cat] > bestCount) {
|
|
105
|
+
best = cat;
|
|
106
|
+
bestCount = tally[cat];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return best;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/analytics/codex/classifier.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAeH,sDAiDC;AAUD,8DA+BC;AA9FD;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,IAA+B;IACjE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,4DAA4D;IAC5D,sEAAsE;IACtE,kEAAkE;IAClE,iEAAiE;IACjE,iEAAiE;IACjE,0DAA0D;IAC1D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACjE,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,qEAAqE;IACrE,oEAAoE;IACpE,mEAAmE;IACnE,6DAA6D;IAC7D,+BAA+B;IAC/B,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,iEAAiE;IACjE,kEAAkE;IAClE,gEAAgE;IAChE,qEAAqE;IACrE,sEAAsE;IACtE,yDAAyD;IACzD,IAAI,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,yBAAyB,CAAC,UAAkC;IACxE,MAAM,KAAK,GAAsC;QAC7C,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,CAAC;KACX,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,GAAsB,OAAO,CAAC;IACtC,IAAI,SAAS,GAAW,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAwB;QAClC,cAAc;QACd,QAAQ;QACR,UAAU;QACV,OAAO;QACP,UAAU;QACV,YAAY;QACZ,OAAO;KACV,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,CAAC;YACX,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex `session_analytics` Stop-hook orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Called from the detached `ironbee codex process-analytics` worker. Reads
|
|
5
|
+
* the FULL rollout at each Stop (from zero), projects it with
|
|
6
|
+
* `projectCodexDelta`, and submits ONE `session_analytics` master event
|
|
7
|
+
* (deterministic id per session → backend latest-wins). Stop-hook emission
|
|
8
|
+
* is gated by `analytics.emitOnStop` (default true) — when disabled, only
|
|
9
|
+
* the SessionEnd-equivalent (live path passes isFinal:false, so the gate
|
|
10
|
+
* relies on emitOnStop; import path always emits via the SessionEnd
|
|
11
|
+
* trigger). Worker passes `isFinal: false` per Round 8 fix (Codex has no
|
|
12
|
+
* true SessionEnd, every Stop is a checkpoint).
|
|
13
|
+
*
|
|
14
|
+
* `session_turn_analytics` is intentionally OUT OF SCOPE on Codex (see
|
|
15
|
+
* `projection.ts` module docstring).
|
|
16
|
+
* The master record's `category_breakdown` + session-level
|
|
17
|
+
* aggregates carry the same signals that turn-level emission would have.
|
|
18
|
+
*
|
|
19
|
+
* Trade-off: from-zero parse on each Stop wastes a bit of CPU vs cursor-
|
|
20
|
+
* incremental, but the rollout is typically <500KB and parse runs in
|
|
21
|
+
* the DETACHED worker so the hook is never blocked. Eliminates accumulated
|
|
22
|
+
* merge state — simpler + idempotent.
|
|
23
|
+
*
|
|
24
|
+
* Independent of Claude's `emit.ts` — Codex projection consumes the
|
|
25
|
+
* RolloutItem enum, not Claude's transcript message lines.
|
|
26
|
+
*/
|
|
27
|
+
import { CodexRolloutLine } from "./types";
|
|
28
|
+
export interface EmitCodexSessionAnalyticsOpts {
|
|
29
|
+
projectDir: string;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
rolloutPath?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Pre-parsed rollout lines (worker-shared across pipelines to avoid
|
|
34
|
+
* a second file read + parse pass). When provided, the function skips
|
|
35
|
+
* its own `readFileSync` + JSON.parse. When omitted, falls back to
|
|
36
|
+
* the local from-zero `parseRollout` call.
|
|
37
|
+
*/
|
|
38
|
+
preloadedLines?: CodexRolloutLine[];
|
|
39
|
+
isFinal?: boolean;
|
|
40
|
+
endReason?: string;
|
|
41
|
+
userEmail?: string;
|
|
42
|
+
usageType?: "api" | "subscription";
|
|
43
|
+
usagePlan?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Stop-hook orchestrator. Fail-safe — silent on every failure. */
|
|
46
|
+
export declare function emitCodexSessionAnalytics(opts: EmitCodexSessionAnalyticsOpts): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/analytics/codex/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAiB3C,MAAM,WAAW,6BAA6B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mEAAmE;AACnE,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGlG"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex `session_analytics` Stop-hook orchestrator.
|
|
4
|
+
*
|
|
5
|
+
* Called from the detached `ironbee codex process-analytics` worker. Reads
|
|
6
|
+
* the FULL rollout at each Stop (from zero), projects it with
|
|
7
|
+
* `projectCodexDelta`, and submits ONE `session_analytics` master event
|
|
8
|
+
* (deterministic id per session → backend latest-wins). Stop-hook emission
|
|
9
|
+
* is gated by `analytics.emitOnStop` (default true) — when disabled, only
|
|
10
|
+
* the SessionEnd-equivalent (live path passes isFinal:false, so the gate
|
|
11
|
+
* relies on emitOnStop; import path always emits via the SessionEnd
|
|
12
|
+
* trigger). Worker passes `isFinal: false` per Round 8 fix (Codex has no
|
|
13
|
+
* true SessionEnd, every Stop is a checkpoint).
|
|
14
|
+
*
|
|
15
|
+
* `session_turn_analytics` is intentionally OUT OF SCOPE on Codex (see
|
|
16
|
+
* `projection.ts` module docstring).
|
|
17
|
+
* The master record's `category_breakdown` + session-level
|
|
18
|
+
* aggregates carry the same signals that turn-level emission would have.
|
|
19
|
+
*
|
|
20
|
+
* Trade-off: from-zero parse on each Stop wastes a bit of CPU vs cursor-
|
|
21
|
+
* incremental, but the rollout is typically <500KB and parse runs in
|
|
22
|
+
* the DETACHED worker so the hook is never blocked. Eliminates accumulated
|
|
23
|
+
* merge state — simpler + idempotent.
|
|
24
|
+
*
|
|
25
|
+
* Independent of Claude's `emit.ts` — Codex projection consumes the
|
|
26
|
+
* RolloutItem enum, not Claude's transcript message lines.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.emitCodexSessionAnalytics = emitCodexSessionAnalytics;
|
|
30
|
+
const fs_1 = require("fs");
|
|
31
|
+
const logger_1 = require("../../lib/logger");
|
|
32
|
+
const actions_1 = require("../../hooks/core/actions");
|
|
33
|
+
const collector_1 = require("../../lib/collector");
|
|
34
|
+
const config_1 = require("../../lib/config");
|
|
35
|
+
const projection_1 = require("./projection");
|
|
36
|
+
const transcript_1 = require("./transcript");
|
|
37
|
+
function parseRollout(path) {
|
|
38
|
+
const raw = (0, fs_1.readFileSync)(path, "utf-8");
|
|
39
|
+
const out = [];
|
|
40
|
+
for (const line of raw.split("\n")) {
|
|
41
|
+
if (line.length === 0) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
out.push(JSON.parse(line));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// malformed line — skip
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
/** Stop-hook orchestrator. Fail-safe — silent on every failure. */
|
|
54
|
+
async function emitCodexSessionAnalytics(opts) {
|
|
55
|
+
if (!(0, config_1.isAnalyticsEnabled)(opts.projectDir)) {
|
|
56
|
+
logger_1.logger.debug(`codex emit: analytics disabled`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Claude-parity: use the same git-aware project-name resolution as
|
|
60
|
+
// Claude's emit pipeline (`hooks/core/actions.ts:resolveProjectName`).
|
|
61
|
+
// Plain `basename(projectDir)` diverges when Codex is launched from a
|
|
62
|
+
// subdir vs Claude operating on the same project from the git root —
|
|
63
|
+
// backend grouping by `project_name` then sees two distinct sessions for
|
|
64
|
+
// the same project.
|
|
65
|
+
const projectName = (0, actions_1.resolveProjectName)(opts.projectDir);
|
|
66
|
+
let lines;
|
|
67
|
+
if (opts.preloadedLines !== undefined) {
|
|
68
|
+
// Worker-provided cache — skip the file read entirely.
|
|
69
|
+
lines = opts.preloadedLines;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
let rolloutPath = opts.rolloutPath ?? null;
|
|
73
|
+
if (rolloutPath === null || !(0, fs_1.existsSync)(rolloutPath)) {
|
|
74
|
+
rolloutPath = (0, transcript_1.findCodexRolloutPath)(opts.sessionId);
|
|
75
|
+
}
|
|
76
|
+
if (rolloutPath === null) {
|
|
77
|
+
logger_1.logger.debug(`codex emit: rollout not found for ${opts.sessionId}`);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
lines = parseRollout(rolloutPath);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
logger_1.logger.debug(`codex emit: rollout parse failed: ${e instanceof Error ? e.message : e}`);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (lines.length === 0) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let projection;
|
|
92
|
+
try {
|
|
93
|
+
projection = (0, projection_1.projectCodexDelta)({
|
|
94
|
+
sessionId: opts.sessionId,
|
|
95
|
+
projectName,
|
|
96
|
+
userEmail: opts.userEmail,
|
|
97
|
+
lines,
|
|
98
|
+
endReason: opts.endReason,
|
|
99
|
+
isFinal: opts.isFinal === true,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
logger_1.logger.debug(`codex emit: projection failed: ${e instanceof Error ? e.message : e}`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Analytics events are typically much larger than the 4KB queue line
|
|
107
|
+
// cap (a 100-turn session can carry 20KB+ in `context_tokens_samples`
|
|
108
|
+
// and per-tool maps), so they POST direct to the collector — mirror of
|
|
109
|
+
// Claude analytics emit. Skip when no collector is configured.
|
|
110
|
+
if (!(0, config_1.isCollectorConfigured)((0, config_1.loadConfig)(opts.projectDir))) {
|
|
111
|
+
logger_1.logger.debug(`codex emit: collector not configured — skipping POST`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const batch = [];
|
|
115
|
+
// Master event — gated by emitOnStop (default true). SessionEnd always emits.
|
|
116
|
+
//
|
|
117
|
+
// Wire shape: `analytics: SessionAnalytics` is NESTED under the event
|
|
118
|
+
// (mirrors Claude side; the collector's session_analytics envelope
|
|
119
|
+
// requires this single nested body field). Earlier code flattened
|
|
120
|
+
// `...projection.delta` at the top level — the collector then saw no
|
|
121
|
+
// `analytics` field → validation reject → 400 on every Codex POST.
|
|
122
|
+
// The session-identity fields (session_id / project_name /
|
|
123
|
+
// user_email / usage_type / usage_plan) live on the top-level
|
|
124
|
+
// envelope, NOT inside `analytics`.
|
|
125
|
+
const shouldEmitMaster = opts.isFinal === true || (0, config_1.isAnalyticsEmitOnStopEnabled)(opts.projectDir);
|
|
126
|
+
if (shouldEmitMaster) {
|
|
127
|
+
// The projection includes `session_id` + `project_name` (carried
|
|
128
|
+
// through the SessionAnalytics body for downstream consumers that
|
|
129
|
+
// see only the analytics blob). The wire envelope ALSO carries
|
|
130
|
+
// them at top level — collector accepts the duplication and
|
|
131
|
+
// canonicalizes on the envelope copy. Mirrors the Claude side.
|
|
132
|
+
const analyticsBody = { ...projection.delta };
|
|
133
|
+
const masterEvent = {
|
|
134
|
+
id: (0, projection_1.deriveCodexSessionAnalyticsEventId)(opts.sessionId),
|
|
135
|
+
type: "session_analytics",
|
|
136
|
+
timestamp: Date.now(),
|
|
137
|
+
session_id: opts.sessionId,
|
|
138
|
+
project_name: projectName,
|
|
139
|
+
user_email: opts.userEmail,
|
|
140
|
+
usage_type: opts.usageType,
|
|
141
|
+
usage_plan: opts.usagePlan,
|
|
142
|
+
analytics: analyticsBody,
|
|
143
|
+
};
|
|
144
|
+
batch.push(masterEvent);
|
|
145
|
+
}
|
|
146
|
+
// session_turn_analytics is OUT OF SCOPE on Codex (see projection.ts
|
|
147
|
+
// module docstring). Only the master session_analytics event ships.
|
|
148
|
+
if (batch.length === 0) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
await (0, collector_1.sendEventsBatchToCollector)(batch, opts.sessionId, opts.projectDir);
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
logger_1.logger.debug(`codex emit: POST batch=${batch.length} failed: ${e instanceof Error ? e.message : e}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=emit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/analytics/codex/emit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex analytics Stop-hook orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Called once per Stop hook fire (verify-gate.ts / activity-end.ts). Reads
|
|
5
|
+
* the rollout (cursor-incremental) and emits:
|
|
6
|
+
*
|
|
7
|
+
* - one or more `api_request` events (per new token_count)
|
|
8
|
+
* - one or more `session_status` events (per new token_count, gated by
|
|
9
|
+
* event-time min-interval throttle + skip-if-unchanged signature —
|
|
10
|
+
* mirror of Claude statusline cadence, see analytics.md)
|
|
11
|
+
*
|
|
12
|
+
* `session_context` is intentionally OUT OF SCOPE on Codex — the only
|
|
13
|
+
* available source (Codex's `~/.codex/logs_2.sqlite` feedback-logger DB)
|
|
14
|
+
* is selective + retention-limited (we'd see 1 of ~94 API request bodies)
|
|
15
|
+
* AND its `input`/`output` fields are redacted by the logger, so
|
|
16
|
+
* per-turn breakdown reconstruction is impossible. Rollout JSONL carries
|
|
17
|
+
* the dynamic side (user_message / function_call / function_call_output)
|
|
18
|
+
* but has NO instructions/tools, so a hybrid pipeline would still need
|
|
19
|
+
* SQLite for the static portion — net value didn't justify the complexity
|
|
20
|
+
* + native-module dependency.
|
|
21
|
+
*
|
|
22
|
+
* All events POST directly to the collector in a single batch (mirror of
|
|
23
|
+
* Claude analytics dispatch). Cursor advances are staged in-memory and
|
|
24
|
+
* only persisted on POST success — fail keeps cursor stale so the next
|
|
25
|
+
* Stop retries (deterministic event ids make retries idempotent via
|
|
26
|
+
* backend dedup). Fail-safe — analytics failures never break the Stop hook.
|
|
27
|
+
*
|
|
28
|
+
* State persistence: rollout cursor + statusline signature live under
|
|
29
|
+
* `.ironbee/sessions/<sid>/analytics-codex/state.json` (separate from the
|
|
30
|
+
* main analytics state to avoid Anthropic-specific reset semantics
|
|
31
|
+
* leaking into Codex).
|
|
32
|
+
*/
|
|
33
|
+
import { CodexRolloutLine } from "./types";
|
|
34
|
+
export interface EmitCodexAnalyticsOpts {
|
|
35
|
+
projectDir: string;
|
|
36
|
+
sessionId: string;
|
|
37
|
+
/** Rollout path supplied by Codex hook stdin (`transcript_path`). Falls back to discovery walk. */
|
|
38
|
+
rolloutPath?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Pre-parsed rollout lines (worker-shared across pipelines to avoid
|
|
41
|
+
* a second file read + parse pass). When provided, the cursor-
|
|
42
|
+
* incremental read is bypassed and the whole array is processed
|
|
43
|
+
* (deterministic event ids dedup re-processed lines at the backend).
|
|
44
|
+
* The cursor (offset/inode/size) is still advanced to current file
|
|
45
|
+
* state for next-Stop incremental behavior in subsequent runs that
|
|
46
|
+
* DON'T supply preloadedLines.
|
|
47
|
+
*/
|
|
48
|
+
preloadedLines?: CodexRolloutLine[];
|
|
49
|
+
/** Pulled from session state.json (set by SessionStart hook). */
|
|
50
|
+
userEmail?: string;
|
|
51
|
+
usageType?: "api" | "subscription";
|
|
52
|
+
usagePlan?: string;
|
|
53
|
+
projectName?: string;
|
|
54
|
+
/** Current active activity_id (for session_status correlation). Empty string when none. */
|
|
55
|
+
activityId?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Stop-hook orchestrator. Wraps each phase in try/catch so an emission
|
|
59
|
+
* failure on one event class doesn't take down the others.
|
|
60
|
+
*/
|
|
61
|
+
export declare function emitCodexAnalytics(opts: EmitCodexAnalyticsOpts): Promise<void>;
|
|
62
|
+
//# sourceMappingURL=events-emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-emit.d.ts","sourceRoot":"","sources":["../../../src/analytics/codex/events-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AA8BH,OAAO,EACH,gBAAgB,EAInB,MAAM,SAAS,CAAC;AAkIjB,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,mGAAmG;IACnG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqWpF"}
|