@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,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee CLI — Codex Import Discovery
|
|
4
|
+
*
|
|
5
|
+
* Resolves an `ImportScope` to a list of `ImportTarget`s by walking
|
|
6
|
+
* `~/.codex/sessions/YYYY/MM/DD/rollout-<ISO>-<UUID>.jsonl`.
|
|
7
|
+
*
|
|
8
|
+
* Unlike Claude (encoded project folder under ~/.claude/projects/), Codex
|
|
9
|
+
* stores rollouts flat by date. Project association is recovered by
|
|
10
|
+
* reading the first line's `session_meta.payload.cwd`. So:
|
|
11
|
+
* - `current-project` → scan every rollout, keep those whose first-line
|
|
12
|
+
* cwd matches the current cwd
|
|
13
|
+
* - `projects <paths>` → scan every rollout, keep those whose first-line
|
|
14
|
+
* cwd matches any of the supplied paths
|
|
15
|
+
* - `all-projects` → scan every rollout, project comes from each rollout's
|
|
16
|
+
* own first-line cwd (one project per rollout)
|
|
17
|
+
* - `transcript <path>` → single file, project from its session_meta line
|
|
18
|
+
*
|
|
19
|
+
* Discovery does NOT apply the time-range filter — `filter.ts` does that
|
|
20
|
+
* after a session is found.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.findCodexTranscripts = findCodexTranscripts;
|
|
24
|
+
const fs_1 = require("fs");
|
|
25
|
+
const path_1 = require("path");
|
|
26
|
+
const logger_1 = require("../../lib/logger");
|
|
27
|
+
const actions_1 = require("../../hooks/core/actions");
|
|
28
|
+
const transcript_1 = require("../../analytics/codex/transcript");
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the scope flag to a list of candidate transcripts. Each returned
|
|
31
|
+
* `ImportTarget` is fully populated EXCEPT that no time-range filter has
|
|
32
|
+
* been applied yet — callers run `filter.ts` over this list.
|
|
33
|
+
*
|
|
34
|
+
* Codex's flat-by-date layout means every scope (except `transcript`) does
|
|
35
|
+
* a full walk + per-file first-line read. That's O(rollouts) per import
|
|
36
|
+
* invocation — acceptable: rollouts are < 10K per machine for a typical
|
|
37
|
+
* dev box, and the first-line read peeks at ≤ 4 KB.
|
|
38
|
+
*/
|
|
39
|
+
function findCodexTranscripts(scope) {
|
|
40
|
+
if (scope.kind === "transcript") {
|
|
41
|
+
const t = buildSingleTranscriptTarget(scope.path);
|
|
42
|
+
return t !== null ? [t] : [];
|
|
43
|
+
}
|
|
44
|
+
if (!(0, fs_1.existsSync)((0, transcript_1.codexSessionsRoot)())) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
// Canonicalize comparison paths via realpathSync — macOS resolves
|
|
48
|
+
// `/var/folders/...` → `/private/var/folders/...` and session_meta.cwd
|
|
49
|
+
// typically holds the realpath form; without canonicalization a
|
|
50
|
+
// symlinked `--projects /tmp/proj` silently returns zero targets when
|
|
51
|
+
// Codex stored `/private/tmp/proj`. Same for cwd on `current-project`.
|
|
52
|
+
const allowProjects = scope.kind === "current-project"
|
|
53
|
+
? new Set([tryRealpath(process.cwd())])
|
|
54
|
+
: scope.kind === "projects"
|
|
55
|
+
? new Set(scope.paths.map((p) => tryRealpath((0, path_1.resolve)(p))))
|
|
56
|
+
: null; // all-projects: accept every cwd
|
|
57
|
+
const out = [];
|
|
58
|
+
for (const rolloutPath of (0, transcript_1.walkAllCodexRollouts)()) {
|
|
59
|
+
const t = buildTargetFromRollout(rolloutPath, allowProjects);
|
|
60
|
+
if (t !== null) {
|
|
61
|
+
out.push(t);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function buildSingleTranscriptTarget(path) {
|
|
67
|
+
const absPath = (0, path_1.isAbsolute)(path) ? path : (0, path_1.resolve)(path);
|
|
68
|
+
if (!(0, fs_1.existsSync)(absPath)) {
|
|
69
|
+
logger_1.logger.debug(`codex import discovery: --transcript ${absPath} doesn't exist`);
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (!absPath.endsWith(".jsonl")) {
|
|
73
|
+
logger_1.logger.debug(`codex import discovery: --transcript ${absPath} is not a .jsonl file`);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// No allow-list filter for single-transcript mode — caller explicitly
|
|
77
|
+
// asked for this file, so we accept whatever cwd the rollout has.
|
|
78
|
+
return buildTargetFromRollout(absPath, null);
|
|
79
|
+
}
|
|
80
|
+
function tryRealpath(p) {
|
|
81
|
+
try {
|
|
82
|
+
return (0, fs_1.realpathSync)(p);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Path doesn't exist on this machine (deleted, never created, or
|
|
86
|
+
// typo). Fall back to the lexical form — the allow-list will
|
|
87
|
+
// simply never match, which is the desired behavior.
|
|
88
|
+
return p;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function buildTargetFromRollout(rolloutPath, allowProjects) {
|
|
92
|
+
const sessionId = (0, transcript_1.sessionIdFromRolloutPath)(rolloutPath);
|
|
93
|
+
if (sessionId === null) {
|
|
94
|
+
logger_1.logger.debug(`codex import discovery: filename shape mismatch ${rolloutPath} — skipping`);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const meta = peekSessionMeta(rolloutPath);
|
|
98
|
+
if (meta === null) {
|
|
99
|
+
logger_1.logger.debug(`codex import discovery: ${rolloutPath} has no session_meta in header — skipping`);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
if (allowProjects !== null && !allowProjects.has(meta.cwd)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
let mtimeMs;
|
|
106
|
+
let sizeBytes;
|
|
107
|
+
try {
|
|
108
|
+
const s = (0, fs_1.statSync)(rolloutPath);
|
|
109
|
+
mtimeMs = s.mtimeMs;
|
|
110
|
+
sizeBytes = s.size;
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
logger_1.logger.debug(`codex import discovery: stat(${rolloutPath}) failed: ${e instanceof Error ? e.message : e}`);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const sessionStartMs = Date.parse(meta.timestamp);
|
|
117
|
+
if (!Number.isFinite(sessionStartMs)) {
|
|
118
|
+
logger_1.logger.debug(`codex import discovery: ${rolloutPath} session_meta has unparseable timestamp ${meta.timestamp} — skipping`);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
client: "codex",
|
|
123
|
+
sessionId,
|
|
124
|
+
transcriptPath: rolloutPath,
|
|
125
|
+
projectDir: meta.cwd,
|
|
126
|
+
// Use git-aware resolveProjectName (Claude-parity) so the import
|
|
127
|
+
// matches the live emit's project_name. Plain basename diverges when
|
|
128
|
+
// a session was launched from a subdir or when the local dir name
|
|
129
|
+
// differs from the git remote name — backend would then see "same
|
|
130
|
+
// session, two different project labels" depending on which path
|
|
131
|
+
// (live vs import) wrote last. See `analytics/codex/emit.ts`
|
|
132
|
+
// for the same fix on the live side.
|
|
133
|
+
projectName: (0, actions_1.resolveProjectName)(meta.cwd),
|
|
134
|
+
sessionStartMs,
|
|
135
|
+
mtimeMs,
|
|
136
|
+
sizeBytes,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Read the first ≤ 4 KB of the rollout, parse the first complete line as
|
|
141
|
+
* the session_meta entry, and pull out `cwd` + `timestamp`. Returns null
|
|
142
|
+
* when the first line isn't a session_meta or the read fails. Sized to be
|
|
143
|
+
* cheap (one syscall + small alloc) so a full-store walk stays fast.
|
|
144
|
+
*/
|
|
145
|
+
function peekSessionMeta(rolloutPath) {
|
|
146
|
+
const READ_CAP = 4 * 1024;
|
|
147
|
+
let fd;
|
|
148
|
+
try {
|
|
149
|
+
fd = (0, fs_1.openSync)(rolloutPath, "r");
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
let firstLine;
|
|
155
|
+
try {
|
|
156
|
+
const buf = Buffer.alloc(READ_CAP);
|
|
157
|
+
const n = (0, fs_1.readSync)(fd, buf, 0, READ_CAP, 0);
|
|
158
|
+
const head = buf.subarray(0, n).toString("utf-8");
|
|
159
|
+
const newlineIdx = head.indexOf("\n");
|
|
160
|
+
firstLine = newlineIdx === -1 ? head : head.slice(0, newlineIdx);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Finally runs in all paths — closeSync below handles cleanup.
|
|
164
|
+
// No inner close here (it would double-close → EBADF).
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
try {
|
|
169
|
+
(0, fs_1.closeSync)(fd);
|
|
170
|
+
}
|
|
171
|
+
catch { /* ignore */ }
|
|
172
|
+
}
|
|
173
|
+
if (firstLine.length === 0) {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
let parsed;
|
|
177
|
+
try {
|
|
178
|
+
parsed = JSON.parse(firstLine);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
const obj = parsed;
|
|
187
|
+
if (obj.type !== "session_meta") {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const payload = obj.payload;
|
|
191
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
const p = payload;
|
|
195
|
+
const cwd = p.cwd;
|
|
196
|
+
const timestamp = p.timestamp ?? obj.timestamp;
|
|
197
|
+
if (typeof cwd !== "string" || cwd.length === 0 || typeof timestamp !== "string" || timestamp.length === 0) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return { cwd, timestamp };
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/import/codex/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee CLI — Codex import file_change derivation.
|
|
3
|
+
*
|
|
4
|
+
* One `file_change` event per file entry inside each `apply_patch`
|
|
5
|
+
* function_call body. Parses the patch via the SAME `parseApplyPatchBody`
|
|
6
|
+
* that the live `clear-verdict` hook uses, so live and import agree
|
|
7
|
+
* byte-for-byte on operation + line counts.
|
|
8
|
+
*
|
|
9
|
+
* Filtered by the project's `verifyPatterns` config (a Write of `foo.test.ts`
|
|
10
|
+
* generates no event when the verify cycle excludes test files).
|
|
11
|
+
*
|
|
12
|
+
* `changeset` parity: live emits a hunks-only V4A per-file slice as the
|
|
13
|
+
* captureChangeset FALLBACK (clear-verdict.ts:284-285 — used when the
|
|
14
|
+
* PreToolUse stash is missing or the unified-diff build fails). The same
|
|
15
|
+
* `e.body` slice is available offline from `parseApplyPatchBody`. When the
|
|
16
|
+
* operator has `fileChange.captureChangeset: true` we emit it here too —
|
|
17
|
+
* without parity, re-import overwrites the live `changeset` field with
|
|
18
|
+
* `undefined` via `(session_id, id)` latest-wins dedup. We deliberately
|
|
19
|
+
* skip the unified-diff primary path: that requires the prior file content
|
|
20
|
+
* which import predates (working tree has moved on).
|
|
21
|
+
*/
|
|
22
|
+
import { FileChangeAction } from "../../../hooks/core/actions";
|
|
23
|
+
export interface BuildCodexFileChangeOpts {
|
|
24
|
+
sessionId: string;
|
|
25
|
+
projectName: string;
|
|
26
|
+
projectDir: string;
|
|
27
|
+
/** Parent turn's activity_id. */
|
|
28
|
+
activityId: string;
|
|
29
|
+
/** `call_id` of the apply_patch call — drives event id derivation. */
|
|
30
|
+
callId: string;
|
|
31
|
+
/** ISO-8601 timestamp from the rollout line. */
|
|
32
|
+
timestamp: string;
|
|
33
|
+
/** Raw `apply_patch.arguments.input` body string. */
|
|
34
|
+
patchBody: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse the patch body and produce one event per file. Returns an empty
|
|
38
|
+
* array when (a) the body is unparseable, (b) every entry's path is
|
|
39
|
+
* ignored, or (c) every entry's path doesn't match any active cycle.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildCodexFileChanges(opts: BuildCodexFileChangeOpts): FileChangeAction[];
|
|
42
|
+
//# sourceMappingURL=file-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-change.d.ts","sourceRoot":"","sources":["../../../../src/import/codex/events/file-change.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,gBAAgB,EAAuB,MAAM,6BAA6B,CAAC;AAWpF,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,GAAG,gBAAgB,EAAE,CA2DxF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee CLI — Codex import file_change derivation.
|
|
4
|
+
*
|
|
5
|
+
* One `file_change` event per file entry inside each `apply_patch`
|
|
6
|
+
* function_call body. Parses the patch via the SAME `parseApplyPatchBody`
|
|
7
|
+
* that the live `clear-verdict` hook uses, so live and import agree
|
|
8
|
+
* byte-for-byte on operation + line counts.
|
|
9
|
+
*
|
|
10
|
+
* Filtered by the project's `verifyPatterns` config (a Write of `foo.test.ts`
|
|
11
|
+
* generates no event when the verify cycle excludes test files).
|
|
12
|
+
*
|
|
13
|
+
* `changeset` parity: live emits a hunks-only V4A per-file slice as the
|
|
14
|
+
* captureChangeset FALLBACK (clear-verdict.ts:284-285 — used when the
|
|
15
|
+
* PreToolUse stash is missing or the unified-diff build fails). The same
|
|
16
|
+
* `e.body` slice is available offline from `parseApplyPatchBody`. When the
|
|
17
|
+
* operator has `fileChange.captureChangeset: true` we emit it here too —
|
|
18
|
+
* without parity, re-import overwrites the live `changeset` field with
|
|
19
|
+
* `undefined` via `(session_id, id)` latest-wins dedup. We deliberately
|
|
20
|
+
* skip the unified-diff primary path: that requires the prior file content
|
|
21
|
+
* which import predates (working tree has moved on).
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.buildCodexFileChanges = buildCodexFileChanges;
|
|
25
|
+
const clear_verdict_1 = require("../../../clients/codex/hooks/clear-verdict");
|
|
26
|
+
const config_1 = require("../../../lib/config");
|
|
27
|
+
const ids_1 = require("../../ids");
|
|
28
|
+
/**
|
|
29
|
+
* Parse the patch body and produce one event per file. Returns an empty
|
|
30
|
+
* array when (a) the body is unparseable, (b) every entry's path is
|
|
31
|
+
* ignored, or (c) every entry's path doesn't match any active cycle.
|
|
32
|
+
*/
|
|
33
|
+
function buildCodexFileChanges(opts) {
|
|
34
|
+
const config = (0, config_1.loadConfig)(opts.projectDir);
|
|
35
|
+
let entries;
|
|
36
|
+
try {
|
|
37
|
+
entries = (0, clear_verdict_1.parseApplyPatchBody)(opts.patchBody);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const captureChangeset = (0, config_1.getCaptureFileChangeset)(config);
|
|
43
|
+
const maxChangesetBytes = (0, config_1.getMaxChangesetBytes)(config);
|
|
44
|
+
const events = [];
|
|
45
|
+
const tsMs = Date.parse(opts.timestamp);
|
|
46
|
+
const stamp = Number.isFinite(tsMs) ? tsMs : Date.now();
|
|
47
|
+
for (let i = 0; i < entries.length; i++) {
|
|
48
|
+
const e = entries[i];
|
|
49
|
+
if (!shouldEmit(config, e.path)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const op = e.operation;
|
|
53
|
+
// Multi-file patches share one call_id — qualify the event id with
|
|
54
|
+
// the entry index + file path so each emits a distinct UUID.
|
|
55
|
+
const event = {
|
|
56
|
+
id: (0, ids_1.deriveFileChangeEventId)(opts.sessionId, `${opts.callId}:${i}:${e.path}`),
|
|
57
|
+
type: "file_change",
|
|
58
|
+
timestamp: stamp,
|
|
59
|
+
session_id: opts.sessionId,
|
|
60
|
+
project_name: opts.projectName,
|
|
61
|
+
activity_id: opts.activityId,
|
|
62
|
+
// Cross-event vocab parity (round 68). See clear-verdict.ts for
|
|
63
|
+
// full rationale: tool_call.tool_name ships "Edit" (round 67)
|
|
64
|
+
// and session_analytics.tools["Edit"] aggregates (round 66), so
|
|
65
|
+
// file_change must use the same alias to keep the backend
|
|
66
|
+
// tool_call ↔ file_change JOIN on tool_name working. Live ↔
|
|
67
|
+
// import parity: this matches `clear-verdict.ts:255`.
|
|
68
|
+
tool_name: "Edit",
|
|
69
|
+
file_path: e.path,
|
|
70
|
+
operation: op,
|
|
71
|
+
// Live parity (clear-verdict.ts). DELETE: BOTH null (whole file
|
|
72
|
+
// removed; prior content unrecoverable; parser's 0 isn't
|
|
73
|
+
// meaningful). CREATE: `lines_removed: 0` — new file has zero
|
|
74
|
+
// prior content, so zero lines were removed. Cross-client
|
|
75
|
+
// parity with Claude Write-create (clients/claude/hooks/
|
|
76
|
+
// clear-verdict.ts:77 + import/claude/events/file-change.ts:85).
|
|
77
|
+
// UPDATE: both real counts.
|
|
78
|
+
lines_added: op === "delete" ? null : e.linesAdded,
|
|
79
|
+
lines_removed: op === "delete" ? null : (op === "create" ? 0 : e.linesRemoved),
|
|
80
|
+
};
|
|
81
|
+
// Live parity for `changeset`: mirror the V4A fallback path
|
|
82
|
+
// (clear-verdict.ts:284-285). `e.body` is hunks-only per-file slice
|
|
83
|
+
// parsed from the rollout's apply_patch body — same source the live
|
|
84
|
+
// fallback uses. Without this, re-import dedup
|
|
85
|
+
// (`(session_id, id)` latest-wins) overwrites live's `changeset`
|
|
86
|
+
// field with `undefined` and the warehouse loses the diff.
|
|
87
|
+
if (captureChangeset && e.body.length > 0) {
|
|
88
|
+
event.changeset = truncateChangeset(e.body, maxChangesetBytes);
|
|
89
|
+
}
|
|
90
|
+
events.push(event);
|
|
91
|
+
}
|
|
92
|
+
return events;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Hunks-only truncation. Mirror of live's `truncateChangeset` in
|
|
96
|
+
* clear-verdict.ts (same head + footer shape) so the wire string is
|
|
97
|
+
* byte-identical when the body fits and footer-identical on overflow.
|
|
98
|
+
*/
|
|
99
|
+
function truncateChangeset(s, maxBytes) {
|
|
100
|
+
if (maxBytes <= 0) {
|
|
101
|
+
return s;
|
|
102
|
+
}
|
|
103
|
+
const buf = Buffer.from(s, "utf-8");
|
|
104
|
+
if (buf.length <= maxBytes) {
|
|
105
|
+
return s;
|
|
106
|
+
}
|
|
107
|
+
const omitted = buf.length - maxBytes;
|
|
108
|
+
const footer = `\n... (truncated, ${omitted} bytes omitted)\n`;
|
|
109
|
+
const footerLen = Buffer.byteLength(footer, "utf-8");
|
|
110
|
+
const headLen = Math.max(0, maxBytes - footerLen);
|
|
111
|
+
const head = buf.subarray(0, headLen).toString("utf-8");
|
|
112
|
+
return head + footer;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Verify-pattern gate. Mirrors what live mode emits: a file_change is on
|
|
116
|
+
* the wire only when `requiresVerification(filePath, config)` returns true
|
|
117
|
+
* — i.e. some cycle's verifyPatterns matches AND the file isn't on the
|
|
118
|
+
* cross-cycle ignore list. Pre-fix import emitted every patch entry
|
|
119
|
+
* unconditionally, which is louder than live + a privacy concern for
|
|
120
|
+
* patterns the operator explicitly excluded.
|
|
121
|
+
*/
|
|
122
|
+
function shouldEmit(config, filePath) {
|
|
123
|
+
return (0, config_1.requiresVerification)(filePath, config);
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=file-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-change.js","sourceRoot":"","sources":["../../../../src/import/codex/events/file-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee CLI — Codex import tool_call derivation.
|
|
3
|
+
*
|
|
4
|
+
* One `tool_call` event per `function_call` ResponseItem in the rollout.
|
|
5
|
+
* Joined to its matching `function_call_output` via `call_id` to populate
|
|
6
|
+
* `tool_response_size` + error message + duration (bracketed by adjacent
|
|
7
|
+
* timestamps when present).
|
|
8
|
+
*
|
|
9
|
+
* For devtools MCP tools (mcp__{browser,node,backend}-devtools__*) we
|
|
10
|
+
* prefer `_metadata.toolCallId` (live MCP-shipped event id) → import and
|
|
11
|
+
* live collide cleanly on `(session_id, id)`. For everything else we
|
|
12
|
+
* fall back to the deterministic-from-call-id formula.
|
|
13
|
+
*
|
|
14
|
+
* `tool_input` is whitelisted via `extractCodexToolInput` — same projection
|
|
15
|
+
* the live track-action hook applies. `tool_response` is not shipped on
|
|
16
|
+
* the wire, only its byte size.
|
|
17
|
+
*/
|
|
18
|
+
import { ToolCallAction } from "../../../hooks/core/actions";
|
|
19
|
+
/** Lightly-typed function_call shape pulled from the rollout. */
|
|
20
|
+
export interface CodexRawCall {
|
|
21
|
+
/** `call_id` — host-supplied per-call identifier. */
|
|
22
|
+
callId: string;
|
|
23
|
+
/** Raw tool name (e.g. `apply_patch`, `exec_command`, `mcp__browser-devtools__bdt_navigation_go-to`). */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Parsed arguments object — may contain `_metadata` for devtools tools. */
|
|
26
|
+
args: Record<string, unknown>;
|
|
27
|
+
/** ISO-8601 timestamp from the rollout line. */
|
|
28
|
+
timestamp: string;
|
|
29
|
+
}
|
|
30
|
+
/** Matching function_call_output for a call. `null` when unmatched (truncated rollout, interrupted). */
|
|
31
|
+
export interface CodexRawCallOutput {
|
|
32
|
+
callId: string;
|
|
33
|
+
/** Raw output text (Codex emits string content). */
|
|
34
|
+
output: string;
|
|
35
|
+
/** ISO-8601 timestamp — used for duration bracketing. */
|
|
36
|
+
timestamp: string;
|
|
37
|
+
/** Heuristic: surfaced when output text begins with "Error:" / "Process exited with code <non-zero>". */
|
|
38
|
+
isError: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface BuildCodexToolCallOpts {
|
|
41
|
+
sessionId: string;
|
|
42
|
+
projectName: string;
|
|
43
|
+
/** Parent turn's activity_id (from `deriveActivityId`). */
|
|
44
|
+
activityId: string;
|
|
45
|
+
call: CodexRawCall;
|
|
46
|
+
output: CodexRawCallOutput | null;
|
|
47
|
+
}
|
|
48
|
+
export declare function buildCodexToolCall(opts: BuildCodexToolCallOpts): ToolCallAction;
|
|
49
|
+
//# sourceMappingURL=tool-call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../../src/import/codex/events/tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAM7D,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAqG/E"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee CLI — Codex import tool_call derivation.
|
|
4
|
+
*
|
|
5
|
+
* One `tool_call` event per `function_call` ResponseItem in the rollout.
|
|
6
|
+
* Joined to its matching `function_call_output` via `call_id` to populate
|
|
7
|
+
* `tool_response_size` + error message + duration (bracketed by adjacent
|
|
8
|
+
* timestamps when present).
|
|
9
|
+
*
|
|
10
|
+
* For devtools MCP tools (mcp__{browser,node,backend}-devtools__*) we
|
|
11
|
+
* prefer `_metadata.toolCallId` (live MCP-shipped event id) → import and
|
|
12
|
+
* live collide cleanly on `(session_id, id)`. For everything else we
|
|
13
|
+
* fall back to the deterministic-from-call-id formula.
|
|
14
|
+
*
|
|
15
|
+
* `tool_input` is whitelisted via `extractCodexToolInput` — same projection
|
|
16
|
+
* the live track-action hook applies. `tool_response` is not shipped on
|
|
17
|
+
* the wire, only its byte size.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.buildCodexToolCall = buildCodexToolCall;
|
|
21
|
+
const util_1 = require("../../../clients/codex/util");
|
|
22
|
+
const ids_1 = require("../../ids");
|
|
23
|
+
const DEVTOOLS_MCP_SERVERS = new Set(["browser-devtools", "node-devtools", "backend-devtools"]);
|
|
24
|
+
function buildCodexToolCall(opts) {
|
|
25
|
+
const { sessionId, projectName, activityId, call, output } = opts;
|
|
26
|
+
const classified = (0, util_1.classifyCodexTool)(call.name);
|
|
27
|
+
const eventId = resolveEventId(sessionId, classified, call);
|
|
28
|
+
const projectedInput = (0, util_1.extractCodexToolInput)(call.name, call.args);
|
|
29
|
+
const inputSize = byteLengthOf(call.args);
|
|
30
|
+
// Cross-client parity (Claude+Cursor emit 0 on failure — see
|
|
31
|
+
// clients/claude/hooks/track-action.ts:210 +
|
|
32
|
+
// import/claude/events/tool-call.ts:138-140). Live Codex was an outlier
|
|
33
|
+
// shipping the error blob byte count; the cross-client parity fix at
|
|
34
|
+
// clients/codex/hooks/track-action.ts now zeroes it on failure, and
|
|
35
|
+
// import must match for backend (session_id, id) dedup to not flip the
|
|
36
|
+
// value between live and import for the same logical failed call.
|
|
37
|
+
const responseSize = output !== null && !output.isError
|
|
38
|
+
? Buffer.byteLength(output.output, "utf-8")
|
|
39
|
+
: 0;
|
|
40
|
+
// Truncate to 500 chars — live parity (clients/codex/hooks/track-action.ts
|
|
41
|
+
// detectFailure uses `t.slice(0, 500)`). Without matching truncation,
|
|
42
|
+
// re-import overwrites live's truncated `error` with a 2KB+ stderr blob
|
|
43
|
+
// → backend wire shape divergent for the same logical failure.
|
|
44
|
+
const errorMsg = output !== null && output.isError
|
|
45
|
+
? output.output.slice(0, 500)
|
|
46
|
+
: undefined;
|
|
47
|
+
// Duration bracket: function_call timestamp → function_call_output
|
|
48
|
+
// timestamp. Codex hook stdin doesn't carry duration_ms even live
|
|
49
|
+
// (the runtime hook derives it via Pre→Post stash); for import the
|
|
50
|
+
// bracket is the only signal. Sequential within a single response
|
|
51
|
+
// batch, so the bracket is a tight approximation per call.
|
|
52
|
+
const callTs = Date.parse(call.timestamp);
|
|
53
|
+
const outTs = output !== null ? Date.parse(output.timestamp) : NaN;
|
|
54
|
+
const durationMs = Number.isFinite(callTs) && Number.isFinite(outTs) && outTs >= callTs
|
|
55
|
+
? outTs - callTs
|
|
56
|
+
: null;
|
|
57
|
+
// Live↔import timestamp parity. Live emits at PostToolUse → `Date.now()` at
|
|
58
|
+
// end-of-tool. The rollout `function_call` line is written at START-of-tool
|
|
59
|
+
// (model dispatch); only `function_call_output` carries the end-of-tool
|
|
60
|
+
// wall clock. Real-corpus divergence between the two: mean ~300ms, P95
|
|
61
|
+
// ~1.3s, max ~2s — for the same logical tool_call live and import shipped
|
|
62
|
+
// distinct `timestamp` values, breaking backend join/time-series plotting
|
|
63
|
+
// on re-import. Prefer the output's timestamp; fall back to the call's
|
|
64
|
+
// when the call was interrupted (no output line).
|
|
65
|
+
const wireTs = Number.isFinite(outTs) ? outTs : (Number.isFinite(callTs) ? callTs : Date.now());
|
|
66
|
+
const event = {
|
|
67
|
+
id: eventId,
|
|
68
|
+
type: "tool_call",
|
|
69
|
+
timestamp: wireTs,
|
|
70
|
+
session_id: sessionId,
|
|
71
|
+
project_name: projectName,
|
|
72
|
+
activity_id: activityId,
|
|
73
|
+
tool_name: classified.tool_name,
|
|
74
|
+
tool_use_id: call.callId,
|
|
75
|
+
tool_input: projectedInput,
|
|
76
|
+
tool_input_size: inputSize,
|
|
77
|
+
tool_response_size: responseSize,
|
|
78
|
+
duration: durationMs,
|
|
79
|
+
};
|
|
80
|
+
if (classified.tool_type !== null) {
|
|
81
|
+
event.tool_type = classified.tool_type;
|
|
82
|
+
}
|
|
83
|
+
if (classified.mcp_server !== null) {
|
|
84
|
+
event.mcp_server = classified.mcp_server;
|
|
85
|
+
}
|
|
86
|
+
if (errorMsg !== undefined) {
|
|
87
|
+
event.error = errorMsg;
|
|
88
|
+
}
|
|
89
|
+
// Project verification cycle correlation fields from devtools
|
|
90
|
+
// `_metadata` (baked in by Codex `require-verification.ts` at live
|
|
91
|
+
// emit time). Live Codex `track-action.ts` reads
|
|
92
|
+
// `getActiveVerificationId(sessionDir)` + `getActiveTraceId(sessionDir)`
|
|
93
|
+
// from state.json and sets `verification_id` + `trace_id` as TOP-LEVEL
|
|
94
|
+
// event fields. Without re-projecting from `_metadata`, backend
|
|
95
|
+
// (session_id, id) latest-wins dedup erases live's correlation fields
|
|
96
|
+
// on every re-import of a Codex session that ran devtools tools
|
|
97
|
+
// during an active verification cycle. Mirror of the Claude-side
|
|
98
|
+
// round-97 fix at `import/claude/events/tool-call.ts:165-202`.
|
|
99
|
+
if (classified.tool_type === "mcp"
|
|
100
|
+
&& classified.mcp_server !== null
|
|
101
|
+
&& DEVTOOLS_MCP_SERVERS.has(classified.mcp_server)) {
|
|
102
|
+
const meta = call.args._metadata;
|
|
103
|
+
if (meta !== null && typeof meta === "object") {
|
|
104
|
+
const m = meta;
|
|
105
|
+
const vid = m.verificationId;
|
|
106
|
+
if (typeof vid === "string" && UUID_SHAPE.test(vid)) {
|
|
107
|
+
event.verification_id = vid;
|
|
108
|
+
}
|
|
109
|
+
// OTEL trace_id is 32-char lowercase hex (W3C trace context),
|
|
110
|
+
// NOT UUID-shaped — accept any non-empty string.
|
|
111
|
+
const tid = m.traceId;
|
|
112
|
+
if (typeof tid === "string" && tid.length > 0) {
|
|
113
|
+
event.trace_id = tid;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return event;
|
|
118
|
+
}
|
|
119
|
+
/** Backend stores event ids as UUID columns; reject corrupt / forged metadata that wouldn't validate. */
|
|
120
|
+
const UUID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
121
|
+
function resolveEventId(sessionId, classified, call) {
|
|
122
|
+
if (classified.tool_type === "mcp"
|
|
123
|
+
&& classified.mcp_server !== null
|
|
124
|
+
&& DEVTOOLS_MCP_SERVERS.has(classified.mcp_server)) {
|
|
125
|
+
const meta = call.args._metadata;
|
|
126
|
+
if (meta !== null && typeof meta === "object") {
|
|
127
|
+
const toolCallId = meta.toolCallId;
|
|
128
|
+
// Only accept UUID-shaped overrides — live `require-verification`
|
|
129
|
+
// generates them with `crypto.randomUUID()`, so any non-UUID
|
|
130
|
+
// value in a replayed rollout is corrupt / forged metadata
|
|
131
|
+
// (would otherwise violate the backend's `(session_id, id)`
|
|
132
|
+
// UUID column constraint).
|
|
133
|
+
if (typeof toolCallId === "string" && UUID_SHAPE.test(toolCallId)) {
|
|
134
|
+
return toolCallId;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return (0, ids_1.deriveToolCallEventIdFromToolUseId)(sessionId, call.callId);
|
|
139
|
+
}
|
|
140
|
+
function byteLengthOf(value) {
|
|
141
|
+
if (value === undefined || value === null) {
|
|
142
|
+
return 0;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
return Buffer.byteLength(JSON.stringify(value), "utf-8");
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=tool-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call.js","sourceRoot":"","sources":["../../../../src/import/codex/events/tool-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee CLI — Codex Per-Session Import Runner
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the full import of one Codex rollout JSONL:
|
|
5
|
+
* 1. Skip check (`<projectDir>/.ironbee/sessions/<id>/`).
|
|
6
|
+
* 2. Parse rollout → extract session_meta + task_started boundaries +
|
|
7
|
+
* function_call + function_call_output + apply_patch + token_count.
|
|
8
|
+
* 3. Build events: session_start, session_end (Stop-as-checkpoint
|
|
9
|
+
* synthetic), activity_start/end per turn, tool_call per
|
|
10
|
+
* function_call (joined to its output via call_id), file_change per
|
|
11
|
+
* apply_patch file entry, api_request per token_count, session_analytics.
|
|
12
|
+
* 4. POST all events via the import emitter (transient retry).
|
|
13
|
+
* 5. Write the marker.
|
|
14
|
+
*
|
|
15
|
+
* Codex-specific because rollout shape diverges from Claude (RolloutItem
|
|
16
|
+
* enum, apply_patch body parser, no per-turn step granularity). Parallel
|
|
17
|
+
* to `src/import/claude/runner.ts` — never mixed in this file.
|
|
18
|
+
*
|
|
19
|
+
* Per-session atomicity: on any unrecoverable failure mid-emit, the
|
|
20
|
+
* marker is NOT written and the session re-attempts on the next
|
|
21
|
+
* `ironbee import` run. Deterministic event ids dedup re-emits at the
|
|
22
|
+
* backend.
|
|
23
|
+
*/
|
|
24
|
+
import { ImportResult, ImportTarget } from "../types";
|
|
25
|
+
import { CodexAgentMessagePayload, CodexTaskStartedPayload, CodexTokenCountPayload, CodexUserMessagePayload } from "../../analytics/codex/types";
|
|
26
|
+
export interface CodexRunnerOpts {
|
|
27
|
+
target: ImportTarget;
|
|
28
|
+
force: boolean;
|
|
29
|
+
/** Events per collector POST; null = use target/default. */
|
|
30
|
+
batchSize?: number | null;
|
|
31
|
+
}
|
|
32
|
+
export declare function importCodexSession(opts: CodexRunnerOpts): Promise<ImportResult>;
|
|
33
|
+
export type _UnusedRefs = CodexAgentMessagePayload | CodexTaskStartedPayload | CodexTokenCountPayload | CodexUserMessagePayload;
|
|
34
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/import/codex/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,EAIH,YAAY,EACZ,YAAY,EACf,MAAM,UAAU,CAAC;AAiBlB,OAAO,EACH,wBAAwB,EAKxB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EAC1B,MAAM,6BAA6B,CAAC;AAWrC,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAkOrF;AAuND,MAAM,MAAM,WAAW,GACjB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,uBAAuB,CAAC"}
|