@ironbee-ai/cli 0.15.0 → 0.16.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 +2 -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 +9 -0
- 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 +14 -0
- package/dist/clients/claude/hooks/clear-verdict.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 +1 -0
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +7 -0
- 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 +299 -0
- package/dist/clients/codex/hooks/clear-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts +30 -0
- package/dist/clients/codex/hooks/require-verdict.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verdict.js +109 -0
- package/dist/clients/codex/hooks/require-verdict.js.map +1 -0
- package/dist/clients/codex/hooks/require-verification.d.ts +12 -0
- package/dist/clients/codex/hooks/require-verification.d.ts.map +1 -0
- package/dist/clients/codex/hooks/require-verification.js +136 -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 +42 -0
- package/dist/clients/codex/index.d.ts.map +1 -0
- package/dist/clients/codex/index.js +427 -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 +12 -3
- package/dist/clients/cursor/hooks/clear-verdict.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 +1 -0
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +13 -0
- 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 +12 -0
- 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/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.map +1 -1
- package/dist/hooks/core/activity-end.js +4 -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/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.map +1 -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/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,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex — PostToolUse hook adapter (matcher: `apply_patch`)
|
|
4
|
+
*
|
|
5
|
+
* Records `file_change` events for each file touched by the patch (operation
|
|
6
|
+
* classified from the patch body's `*** Add/Update/Delete File:` markers).
|
|
7
|
+
* Then clears the verdict file so the next verification cycle has a fresh
|
|
8
|
+
* slate.
|
|
9
|
+
*
|
|
10
|
+
* NOTE on line counts: Codex's `apply_patch` tool_input contains the patch
|
|
11
|
+
* itself, so we can derive `lines_added` / `lines_removed` directly from
|
|
12
|
+
* patch body parsing (counting `+` / `-` lines per file section) — no need
|
|
13
|
+
* to stash file content from PreToolUse. This is a Codex-specific advantage
|
|
14
|
+
* over Claude's Write+Edit (which only carry final content, not the diff).
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.applyPatchStashKey = applyPatchStashKey;
|
|
18
|
+
exports.parseApplyPatchBody = parseApplyPatchBody;
|
|
19
|
+
exports.run = run;
|
|
20
|
+
const fs_1 = require("fs");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const actions_1 = require("../../../hooks/core/actions");
|
|
23
|
+
const ids_1 = require("../../../import/ids");
|
|
24
|
+
const clear_verdict_1 = require("../../../hooks/core/clear-verdict");
|
|
25
|
+
const file_diff_1 = require("../../../hooks/core/file-diff");
|
|
26
|
+
const session_state_1 = require("../../../hooks/core/session-state");
|
|
27
|
+
const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
|
|
28
|
+
const config_1 = require("../../../lib/config");
|
|
29
|
+
const logger_1 = require("../../../lib/logger");
|
|
30
|
+
const output_1 = require("../../../lib/output");
|
|
31
|
+
const stdin_1 = require("../../../lib/stdin");
|
|
32
|
+
const util_1 = require("../util");
|
|
33
|
+
const STASH_KEY_SUFFIX = ".apply-patch";
|
|
34
|
+
/**
|
|
35
|
+
* Returns the tool-use-stash key for the apply_patch prior-content stash.
|
|
36
|
+
* Suffixed so it doesn't collide with `track-action-pre`'s timing stash
|
|
37
|
+
* (which keys on the bare `tool_use_id`).
|
|
38
|
+
*/
|
|
39
|
+
function applyPatchStashKey(toolUseId) {
|
|
40
|
+
return `${toolUseId}${STASH_KEY_SUFFIX}`;
|
|
41
|
+
}
|
|
42
|
+
function truncateChangeset(s, maxBytes) {
|
|
43
|
+
if (maxBytes <= 0) {
|
|
44
|
+
return s;
|
|
45
|
+
}
|
|
46
|
+
const buf = Buffer.from(s, "utf-8");
|
|
47
|
+
if (buf.length <= maxBytes) {
|
|
48
|
+
return s;
|
|
49
|
+
}
|
|
50
|
+
const omitted = buf.length - maxBytes;
|
|
51
|
+
const footer = `\n... (truncated, ${omitted} bytes omitted)\n`;
|
|
52
|
+
const footerLen = Buffer.byteLength(footer, "utf-8");
|
|
53
|
+
const headLen = Math.max(0, maxBytes - footerLen);
|
|
54
|
+
const head = buf.subarray(0, headLen).toString("utf-8");
|
|
55
|
+
return head + footer;
|
|
56
|
+
}
|
|
57
|
+
function resolveFilePath(projectDir, entryPath) {
|
|
58
|
+
return (0, path_1.isAbsolute)(entryPath) ? entryPath : (0, path_1.join)(projectDir, entryPath);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build the standard unified-diff changeset for one file using the
|
|
62
|
+
* PreToolUse stash + the post-state file content on disk. Mirrors
|
|
63
|
+
* Claude's `buildChangeset` so the wire output is identical across
|
|
64
|
+
* clients.
|
|
65
|
+
*
|
|
66
|
+
* Returns `undefined` when the diff can't be produced (binary file,
|
|
67
|
+
* post-state read failure, identical content) — caller falls back to the
|
|
68
|
+
* V4A per-file body slice in that case.
|
|
69
|
+
*/
|
|
70
|
+
function buildUnifiedDiffChangeset(projectDir, e, priorContent, maxBytes) {
|
|
71
|
+
const abs = resolveFilePath(projectDir, e.path);
|
|
72
|
+
let postContent;
|
|
73
|
+
try {
|
|
74
|
+
// Delete File: post-state is gone on disk — use empty string.
|
|
75
|
+
postContent = e.operation === "delete" || !(0, fs_1.existsSync)(abs) ? "" : (0, fs_1.readFileSync)(abs, "utf-8");
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
logger_1.logger.debug(`failed to read post-state of ${abs} for changeset: ${err}`);
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const prior = priorContent ?? "";
|
|
82
|
+
const diff = (0, file_diff_1.createUnifiedDiff)(prior, postContent, maxBytes);
|
|
83
|
+
return diff ?? undefined;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse a Codex `apply_patch` tool_input.input body into per-file entries.
|
|
87
|
+
*
|
|
88
|
+
* Body format (from Codex's apply_patch tool):
|
|
89
|
+
* *** Begin Patch
|
|
90
|
+
* *** Add File: path/to/new.ts
|
|
91
|
+
* +line1
|
|
92
|
+
* +line2
|
|
93
|
+
* *** Update File: path/to/existing.ts
|
|
94
|
+
* @@ ...
|
|
95
|
+
* -old
|
|
96
|
+
* +new
|
|
97
|
+
* *** Delete File: path/to/old.ts
|
|
98
|
+
* *** End Patch
|
|
99
|
+
*
|
|
100
|
+
* Returns one entry per file with operation + line-count tallies.
|
|
101
|
+
*/
|
|
102
|
+
function parseApplyPatchBody(body) {
|
|
103
|
+
const entries = [];
|
|
104
|
+
let current = null;
|
|
105
|
+
let currentLines = [];
|
|
106
|
+
const flushCurrent = () => {
|
|
107
|
+
if (current) {
|
|
108
|
+
current.body = currentLines.join("\n");
|
|
109
|
+
entries.push(current);
|
|
110
|
+
current = null;
|
|
111
|
+
currentLines = [];
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const lines = body.split("\n");
|
|
115
|
+
for (const raw of lines) {
|
|
116
|
+
const line = raw;
|
|
117
|
+
const addMatch = line.match(/^\*\*\* Add File: (.+)$/);
|
|
118
|
+
const updateMatch = line.match(/^\*\*\* Update File: (.+)$/);
|
|
119
|
+
const deleteMatch = line.match(/^\*\*\* Delete File: (.+)$/);
|
|
120
|
+
const endMatch = line.match(/^\*\*\* (End Patch|Move to: .+)$/);
|
|
121
|
+
// Headers (`*** Add/Update/Delete File: X`) are PARSED but NOT included
|
|
122
|
+
// in the per-file body slice. `file_path` rides on the event already;
|
|
123
|
+
// including the header would be redundant info on the wire and would
|
|
124
|
+
// diverge from Claude/Cursor changeset shape (which is hunks-only).
|
|
125
|
+
if (addMatch) {
|
|
126
|
+
flushCurrent();
|
|
127
|
+
current = { path: addMatch[1].trim(), operation: "create", linesAdded: 0, linesRemoved: 0, body: "" };
|
|
128
|
+
currentLines = [];
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (updateMatch) {
|
|
132
|
+
flushCurrent();
|
|
133
|
+
current = { path: updateMatch[1].trim(), operation: "update", linesAdded: 0, linesRemoved: 0, body: "" };
|
|
134
|
+
currentLines = [];
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (deleteMatch) {
|
|
138
|
+
flushCurrent();
|
|
139
|
+
current = { path: deleteMatch[1].trim(), operation: "delete", linesAdded: 0, linesRemoved: 0, body: "" };
|
|
140
|
+
currentLines = [];
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (endMatch) {
|
|
144
|
+
flushCurrent();
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (current) {
|
|
148
|
+
currentLines.push(line);
|
|
149
|
+
if (current.operation !== "delete") {
|
|
150
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
151
|
+
current.linesAdded += 1;
|
|
152
|
+
}
|
|
153
|
+
else if (line.startsWith("-") && !line.startsWith("---")) {
|
|
154
|
+
current.linesRemoved += 1;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
flushCurrent();
|
|
160
|
+
return entries;
|
|
161
|
+
}
|
|
162
|
+
async function run(projectDir) {
|
|
163
|
+
const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
|
|
164
|
+
const sessionId = input.session_id ?? "default";
|
|
165
|
+
const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
|
|
166
|
+
const actionsFile = `${sessionDir}/actions.jsonl`;
|
|
167
|
+
const verdictFile = `${sessionDir}/verdict.json`;
|
|
168
|
+
(0, logger_1.setLogFile)(`${sessionDir}/session.log`);
|
|
169
|
+
// Codex's apply_patch hook stdin shape (live-tested on 0.135.0):
|
|
170
|
+
// tool_input is an object: { "command": "<patch body string>" }
|
|
171
|
+
// For the custom_tool_call wire form Codex normalizes the patch into the
|
|
172
|
+
// `command` field of the hook stdin's tool_input. Fallback to `.input`
|
|
173
|
+
// (function_call shape) and raw-string (defensive) for forward-compat.
|
|
174
|
+
const ti = input.tool_input;
|
|
175
|
+
let patchBody;
|
|
176
|
+
if (typeof ti === "string") {
|
|
177
|
+
patchBody = ti;
|
|
178
|
+
}
|
|
179
|
+
else if (typeof ti === "object" && ti !== null) {
|
|
180
|
+
const rec = ti;
|
|
181
|
+
patchBody = rec.command ?? rec.input;
|
|
182
|
+
}
|
|
183
|
+
if (typeof patchBody === "string") {
|
|
184
|
+
const config = (0, config_1.loadConfig)(projectDir);
|
|
185
|
+
const captureChangeset = (0, config_1.getCaptureFileChangeset)(config);
|
|
186
|
+
const maxChangesetBytes = (0, config_1.getMaxChangesetBytes)(config);
|
|
187
|
+
const entries = parseApplyPatchBody(patchBody);
|
|
188
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
189
|
+
const fixId = (0, session_state_1.getActiveFixId)(sessionDir);
|
|
190
|
+
// Consume the PreToolUse stash ONCE (it's a file-backed consume —
|
|
191
|
+
// second call returns null). May be absent (captureChangeset was
|
|
192
|
+
// off at PreToolUse time, hook dispatch race, missing tool_use_id);
|
|
193
|
+
// in that case we fall back to the V4A per-file body slice for
|
|
194
|
+
// every entry below.
|
|
195
|
+
const toolUseId = input.tool_use_id ?? "";
|
|
196
|
+
const stash = captureChangeset && toolUseId
|
|
197
|
+
? (0, tool_use_stash_1.consumeToolUseData)(sessionId, applyPatchStashKey(toolUseId))
|
|
198
|
+
: null;
|
|
199
|
+
for (let i = 0; i < entries.length; i++) {
|
|
200
|
+
const e = entries[i];
|
|
201
|
+
if (!(0, config_1.requiresVerification)(e.path, config)) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
// `fix_id` is FixAwareEvent-required (`string` typing), but the
|
|
205
|
+
// collector schema treats it as a non-empty string when present —
|
|
206
|
+
// emitting `fix_id: ""` literally is rejected. So we omit the
|
|
207
|
+
// field when no fix is active (mirrors Claude live's
|
|
208
|
+
// `getActiveFixId(sessionDir)!` + `JSON.stringify` drop, and the
|
|
209
|
+
// Codex import side which already omits via `as FileChangeAction`
|
|
210
|
+
// cast). The cast here matches that pattern.
|
|
211
|
+
//
|
|
212
|
+
// Same rule for `activity_id` (round 31): ActivityAwareEvent
|
|
213
|
+
// requires it, but empty value is FK-rejected by the collector.
|
|
214
|
+
// Claude/Cursor live use `activityId!` so JSON.stringify drops
|
|
215
|
+
// when undefined; Codex was the outlier shipping literal "".
|
|
216
|
+
const event = {
|
|
217
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
218
|
+
type: "file_change",
|
|
219
|
+
timestamp: Date.now(),
|
|
220
|
+
file_path: e.path,
|
|
221
|
+
// Cross-event vocab parity (round 68). For the SAME logical
|
|
222
|
+
// operation, Codex emits a `tool_call` (via track-action.ts)
|
|
223
|
+
// and a `file_change` (here) at the same PostToolUse moment.
|
|
224
|
+
// `tool_call.tool_name` is Claude-aliased to "Edit" (round 67
|
|
225
|
+
// via `normalizeCodexToolName` in `classifyCodexTool`), and
|
|
226
|
+
// `session_analytics.tools["Edit"]` aggregates them (round
|
|
227
|
+
// 66 via `claudeAlias` in `analytics/codex/projection.ts`).
|
|
228
|
+
// Shipping `file_change.tool_name: "apply_patch"` here would
|
|
229
|
+
// leave the backend unable to JOIN `tool_call ↔ file_change`
|
|
230
|
+
// on `(session_id, timestamp, tool_name)` for every Codex
|
|
231
|
+
// apply_patch event. Align with the Claude-alias chain so
|
|
232
|
+
// Codex matches Claude/Cursor's cross-event consistency
|
|
233
|
+
// (both clients ship the SAME literal in both events).
|
|
234
|
+
tool_name: "Edit",
|
|
235
|
+
operation: e.operation,
|
|
236
|
+
// For DELETE: BOTH unknown (whole file removed; prior content
|
|
237
|
+
// never read so we can't count lines; patch body has no `+`/`-`
|
|
238
|
+
// lines so the parser's 0/0 isn't meaningful).
|
|
239
|
+
// For CREATE: `lines_removed: 0` — by definition a new file
|
|
240
|
+
// has zero prior content, so zero lines were removed. This is
|
|
241
|
+
// a concrete known value, not "unknown". Cross-client parity:
|
|
242
|
+
// Claude Write-create ships `lines_removed: 0`
|
|
243
|
+
// (clients/claude/hooks/clear-verdict.ts:77) and import
|
|
244
|
+
// matches (import/claude/events/file-change.ts:85). Backend
|
|
245
|
+
// dashboards filtering `WHERE operation='create' AND
|
|
246
|
+
// lines_removed=0` previously saw only Claude creates;
|
|
247
|
+
// Codex creates were invisible because they shipped null.
|
|
248
|
+
// For UPDATE: both real counts.
|
|
249
|
+
lines_added: e.operation === "delete" ? null : e.linesAdded,
|
|
250
|
+
lines_removed: e.operation === "delete" ? null : (e.operation === "create" ? 0 : e.linesRemoved),
|
|
251
|
+
};
|
|
252
|
+
if (activityId) {
|
|
253
|
+
event.activity_id = activityId;
|
|
254
|
+
}
|
|
255
|
+
if (fixId) {
|
|
256
|
+
event.fix_id = fixId;
|
|
257
|
+
}
|
|
258
|
+
// Live↔import event.id parity. Same pattern as round-19 tool_call
|
|
259
|
+
// fix: import `events/file-change.ts:61` derives id via
|
|
260
|
+
// `deriveFileChangeEventId(sessionId, "${callId}:${i}:${path}")`.
|
|
261
|
+
// Without matching here, every apply_patch's file_change events
|
|
262
|
+
// duplicate in the warehouse on re-import (random UUID live vs
|
|
263
|
+
// deterministic import → backend `(session_id, id)` dedup misses).
|
|
264
|
+
if (toolUseId.length > 0) {
|
|
265
|
+
event.id = (0, ids_1.deriveFileChangeEventId)(sessionId, `${toolUseId}:${i}:${e.path}`);
|
|
266
|
+
}
|
|
267
|
+
if (captureChangeset) {
|
|
268
|
+
// Primary path: standard unified diff via the stash. Matches
|
|
269
|
+
// Claude/Cursor wire shape exactly (hunks with `@@ -A,B +C,D @@`
|
|
270
|
+
// headers, no filename header, line numbers from the actual
|
|
271
|
+
// pre/post content on disk).
|
|
272
|
+
let changeset;
|
|
273
|
+
if (stash && Object.prototype.hasOwnProperty.call(stash.prior_contents, e.path)) {
|
|
274
|
+
changeset = buildUnifiedDiffChangeset(projectDir, e, stash.prior_contents[e.path], maxChangesetBytes);
|
|
275
|
+
}
|
|
276
|
+
// Fallback: Codex V4A per-file body slice (hunks-only, but
|
|
277
|
+
// `@@` separators have no line numbers — Codex's own format).
|
|
278
|
+
// Used when stash is missing (captureChangeset toggled mid-cycle,
|
|
279
|
+
// missing tool_use_id, etc.) or when the unified-diff build
|
|
280
|
+
// failed (binary, post-state read error).
|
|
281
|
+
if (changeset === undefined && e.body.length > 0) {
|
|
282
|
+
changeset = truncateChangeset(e.body, maxChangesetBytes);
|
|
283
|
+
}
|
|
284
|
+
if (changeset !== undefined) {
|
|
285
|
+
event.changeset = changeset;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
await (0, actions_1.appendAction)(actionsFile, event);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const clearInput = {
|
|
292
|
+
verdictFile,
|
|
293
|
+
sessionDir,
|
|
294
|
+
};
|
|
295
|
+
(0, clear_verdict_1.runClearVerdict)(clearInput);
|
|
296
|
+
logger_1.logger.debug(`clear-verdict: cleared for ${sessionId}`);
|
|
297
|
+
(0, output_1.writeAndExit)(JSON.stringify({}), 0);
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=clear-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/clear-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex — PreToolUse hook adapter (matcher: `^apply_patch$`)
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities:
|
|
5
|
+
* 1. Block `apply_patch` if devtools tools were used in this verification
|
|
6
|
+
* cycle without a verdict submitted (forces the agent to call
|
|
7
|
+
* `submit-verdict` before editing again).
|
|
8
|
+
* 2. When `fileChange.captureChangeset` is enabled, stash each touched
|
|
9
|
+
* file's PRIOR content keyed on `tool_use_id` so the matching
|
|
10
|
+
* PostToolUse adapter (`clear-verdict`) can produce a standard
|
|
11
|
+
* unified-diff `changeset` via `createUnifiedDiff` — same wire format
|
|
12
|
+
* Claude/Cursor emit. Without this stash, `clear-verdict` falls back
|
|
13
|
+
* to the V4A per-file body slice (`@@`-only, no line numbers).
|
|
14
|
+
*
|
|
15
|
+
* Returns `permissionDecision: "deny"` (with reason) to block; otherwise
|
|
16
|
+
* starts the activity as a fallback and allows the tool to proceed.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Stash payload consumed by clear-verdict to produce a unified-diff
|
|
20
|
+
* changeset. Keys are the per-file paths as they appear in the patch
|
|
21
|
+
* (relative to the project root or absolute); values are the file's
|
|
22
|
+
* content at PreToolUse time, or `null` when the file didn't exist
|
|
23
|
+
* (Add File case — we still write a key so clear-verdict knows the
|
|
24
|
+
* stash was attempted for this path).
|
|
25
|
+
*/
|
|
26
|
+
export interface CodexApplyPatchStash {
|
|
27
|
+
prior_contents: Record<string, string | null>;
|
|
28
|
+
}
|
|
29
|
+
export declare function run(projectDir: string): Promise<void>;
|
|
30
|
+
//# sourceMappingURL=require-verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACjC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACjD;AAgDD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC3D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex — PreToolUse hook adapter (matcher: `^apply_patch$`)
|
|
4
|
+
*
|
|
5
|
+
* Two responsibilities:
|
|
6
|
+
* 1. Block `apply_patch` if devtools tools were used in this verification
|
|
7
|
+
* cycle without a verdict submitted (forces the agent to call
|
|
8
|
+
* `submit-verdict` before editing again).
|
|
9
|
+
* 2. When `fileChange.captureChangeset` is enabled, stash each touched
|
|
10
|
+
* file's PRIOR content keyed on `tool_use_id` so the matching
|
|
11
|
+
* PostToolUse adapter (`clear-verdict`) can produce a standard
|
|
12
|
+
* unified-diff `changeset` via `createUnifiedDiff` — same wire format
|
|
13
|
+
* Claude/Cursor emit. Without this stash, `clear-verdict` falls back
|
|
14
|
+
* to the V4A per-file body slice (`@@`-only, no line numbers).
|
|
15
|
+
*
|
|
16
|
+
* Returns `permissionDecision: "deny"` (with reason) to block; otherwise
|
|
17
|
+
* starts the activity as a fallback and allows the tool to proceed.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.run = run;
|
|
21
|
+
const fs_1 = require("fs");
|
|
22
|
+
const path_1 = require("path");
|
|
23
|
+
const actions_1 = require("../../../hooks/core/actions");
|
|
24
|
+
const activity_1 = require("../../../hooks/core/activity");
|
|
25
|
+
const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
|
|
26
|
+
const config_1 = require("../../../lib/config");
|
|
27
|
+
const logger_1 = require("../../../lib/logger");
|
|
28
|
+
const stdin_1 = require("../../../lib/stdin");
|
|
29
|
+
const util_1 = require("../util");
|
|
30
|
+
const clear_verdict_1 = require("./clear-verdict");
|
|
31
|
+
function readPatchBody(input) {
|
|
32
|
+
const ti = input.tool_input;
|
|
33
|
+
if (typeof ti === "string") {
|
|
34
|
+
return ti;
|
|
35
|
+
}
|
|
36
|
+
if (typeof ti === "object" && ti !== null) {
|
|
37
|
+
const rec = ti;
|
|
38
|
+
const cmd = rec.command ?? rec.input;
|
|
39
|
+
if (typeof cmd === "string") {
|
|
40
|
+
return cmd;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function resolveFilePath(projectDir, entryPath) {
|
|
46
|
+
return (0, path_1.isAbsolute)(entryPath) ? entryPath : (0, path_1.join)(projectDir, entryPath);
|
|
47
|
+
}
|
|
48
|
+
function stashPriorContents(projectDir, sessionId, toolUseId, patchBody) {
|
|
49
|
+
const entries = (0, clear_verdict_1.parseApplyPatchBody)(patchBody);
|
|
50
|
+
const priorContents = {};
|
|
51
|
+
for (const e of entries) {
|
|
52
|
+
// Add File: no pre-state; mark as null (absent) so clear-verdict
|
|
53
|
+
// knows the stash entry was deliberate (vs missing).
|
|
54
|
+
if (e.operation === "create") {
|
|
55
|
+
priorContents[e.path] = null;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const abs = resolveFilePath(projectDir, e.path);
|
|
59
|
+
try {
|
|
60
|
+
priorContents[e.path] = (0, fs_1.existsSync)(abs) ? (0, fs_1.readFileSync)(abs, "utf-8") : null;
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger_1.logger.debug(`failed to read prior content of ${abs} for changeset stash: ${err}`);
|
|
64
|
+
priorContents[e.path] = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const data = { prior_contents: priorContents };
|
|
68
|
+
(0, tool_use_stash_1.stashToolUseData)(sessionId, (0, clear_verdict_1.applyPatchStashKey)(toolUseId), data);
|
|
69
|
+
}
|
|
70
|
+
async function run(projectDir) {
|
|
71
|
+
const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
|
|
72
|
+
const sessionId = input.session_id ?? "default";
|
|
73
|
+
const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
|
|
74
|
+
const actionsFile = `${sessionDir}/actions.jsonl`;
|
|
75
|
+
(0, logger_1.setLogFile)(`${sessionDir}/session.log`);
|
|
76
|
+
if ((0, actions_1.hasToolCallsSinceLastVerdict)(actionsFile)) {
|
|
77
|
+
const reason = `BLOCKED: You used devtools tools but haven't submitted a verdict yet.
|
|
78
|
+
|
|
79
|
+
You MUST submit a verdict before editing more code. Use:
|
|
80
|
+
echo '{"session_id":"${sessionId}","status":"fail","checks":["..."],"issues":["..."]}' | ironbee hook submit-verdict
|
|
81
|
+
|
|
82
|
+
Then proceed with the edit.`;
|
|
83
|
+
process.stdout.write(JSON.stringify({
|
|
84
|
+
hookSpecificOutput: {
|
|
85
|
+
hookEventName: "PreToolUse",
|
|
86
|
+
permissionDecision: "deny",
|
|
87
|
+
permissionDecisionReason: reason,
|
|
88
|
+
},
|
|
89
|
+
}));
|
|
90
|
+
process.exit(0);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Stash prior file contents for clear-verdict to compute a unified-diff
|
|
94
|
+
// changeset. Skipped on deny (above) — the patch won't run, no consumer.
|
|
95
|
+
const toolUseId = input.tool_use_id ?? "";
|
|
96
|
+
if (toolUseId) {
|
|
97
|
+
const cfg = (0, config_1.loadConfig)(projectDir);
|
|
98
|
+
if ((0, config_1.getCaptureFileChangeset)(cfg)) {
|
|
99
|
+
const patchBody = readPatchBody(input);
|
|
100
|
+
if (patchBody !== null) {
|
|
101
|
+
stashPriorContents(projectDir, sessionId, toolUseId, patchBody);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
|
|
106
|
+
logger_1.logger.debug(`require-verdict: allowed apply_patch`);
|
|
107
|
+
process.exit(0);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=require-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/require-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex — PreToolUse hook adapter (matcher: `mcp__.*-devtools__.*`)
|
|
3
|
+
*
|
|
4
|
+
* Blocks devtools tool usage when no verification cycle is active.
|
|
5
|
+
* When allowed, injects `_metadata` into tool_input via Codex's
|
|
6
|
+
* `updatedInput` + **`permissionDecision: "allow"`** (the latter is
|
|
7
|
+
* REQUIRED — without it Codex silently drops the rewrite).
|
|
8
|
+
*
|
|
9
|
+
* Returns `permissionDecision: "deny"` (exit 2-equivalent) when blocked.
|
|
10
|
+
*/
|
|
11
|
+
export declare function run(projectDir: string): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=require-verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-verification.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/require-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H3D"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex — PreToolUse hook adapter (matcher: `mcp__.*-devtools__.*`)
|
|
4
|
+
*
|
|
5
|
+
* Blocks devtools tool usage when no verification cycle is active.
|
|
6
|
+
* When allowed, injects `_metadata` into tool_input via Codex's
|
|
7
|
+
* `updatedInput` + **`permissionDecision: "allow"`** (the latter is
|
|
8
|
+
* REQUIRED — without it Codex silently drops the rewrite).
|
|
9
|
+
*
|
|
10
|
+
* Returns `permissionDecision: "deny"` (exit 2-equivalent) when blocked.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.run = run;
|
|
14
|
+
const crypto_1 = require("crypto");
|
|
15
|
+
const activity_1 = require("../../../hooks/core/activity");
|
|
16
|
+
const session_state_1 = require("../../../hooks/core/session-state");
|
|
17
|
+
const actions_1 = require("../../../hooks/core/actions");
|
|
18
|
+
const config_1 = require("../../../lib/config");
|
|
19
|
+
const logger_1 = require("../../../lib/logger");
|
|
20
|
+
const stdin_1 = require("../../../lib/stdin");
|
|
21
|
+
const util_1 = require("../util");
|
|
22
|
+
async function run(projectDir) {
|
|
23
|
+
const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
|
|
24
|
+
const sessionId = input.session_id ?? "default";
|
|
25
|
+
const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
|
|
26
|
+
const actionsFile = `${sessionDir}/actions.jsonl`;
|
|
27
|
+
(0, logger_1.setLogFile)(`${sessionDir}/session.log`);
|
|
28
|
+
const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
|
|
29
|
+
if (!verificationId) {
|
|
30
|
+
const reason = `BLOCKED: You must start a verification cycle before using devtools tools.
|
|
31
|
+
|
|
32
|
+
Start verification first:
|
|
33
|
+
echo '{"session_id":"${sessionId}"}' | ironbee hook verification-start
|
|
34
|
+
|
|
35
|
+
Then use the verification tools for the active cycle(s) — mcp__browser-devtools__bdt_* for browser, mcp__node-devtools__ndt_* for node, mcp__backend-devtools__bedt_* for backend.`;
|
|
36
|
+
process.stdout.write(JSON.stringify({
|
|
37
|
+
hookSpecificOutput: {
|
|
38
|
+
hookEventName: "PreToolUse",
|
|
39
|
+
permissionDecision: "deny",
|
|
40
|
+
permissionDecisionReason: reason,
|
|
41
|
+
},
|
|
42
|
+
}));
|
|
43
|
+
process.exit(0);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Recording enforcement is browser-only.
|
|
47
|
+
const toolName = input.tool_name ?? "";
|
|
48
|
+
const mcpServer = (0, util_1.extractCodexMcpServer)(toolName);
|
|
49
|
+
const isBrowserDevToolsCall = mcpServer === "browser-devtools";
|
|
50
|
+
// Codex flattens `-` → `_` on hook dispatch — the raw tool_name is
|
|
51
|
+
// `mcp__browser_devtools__bdt_content_start_recording`. Canonicalize
|
|
52
|
+
// the bare tool segment before comparing against the documented
|
|
53
|
+
// hyphenated form. Without this, the recording-start tool blocks
|
|
54
|
+
// itself and the agent can never start recording (infinite loop:
|
|
55
|
+
// gate denies → agent retries → gate denies → …).
|
|
56
|
+
const bareToolName = isBrowserDevToolsCall
|
|
57
|
+
? (0, util_1.canonicalizeCodexToolName)(toolName.split("__").pop() ?? "")
|
|
58
|
+
: "";
|
|
59
|
+
const isRecordingStartTool = bareToolName === "bdt_content_start-recording";
|
|
60
|
+
if (isBrowserDevToolsCall &&
|
|
61
|
+
(0, session_state_1.isRecordingRequired)(sessionDir) &&
|
|
62
|
+
!(0, session_state_1.isRecordingActive)(sessionDir) &&
|
|
63
|
+
!isRecordingStartTool) {
|
|
64
|
+
const reason = `BLOCKED: Recording is required but not started.
|
|
65
|
+
|
|
66
|
+
1. Start recording NOW:
|
|
67
|
+
Use mcp__browser-devtools__bdt_content_start-recording
|
|
68
|
+
|
|
69
|
+
2. Run the verification (navigate, screenshot, aria, console, etc.)
|
|
70
|
+
|
|
71
|
+
3. **Stop recording BEFORE submitting verdict:**
|
|
72
|
+
Use mcp__browser-devtools__bdt_content_stop-recording
|
|
73
|
+
submit-verdict will reject with "recording is still active" if you skip this.`;
|
|
74
|
+
process.stdout.write(JSON.stringify({
|
|
75
|
+
hookSpecificOutput: {
|
|
76
|
+
hookEventName: "PreToolUse",
|
|
77
|
+
permissionDecision: "deny",
|
|
78
|
+
permissionDecisionReason: reason,
|
|
79
|
+
},
|
|
80
|
+
}));
|
|
81
|
+
process.exit(0);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// ensure activity is open before reading its ID for metadata propagation
|
|
85
|
+
await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
|
|
86
|
+
const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
87
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
88
|
+
const projectName = (0, actions_1.resolveProjectName)(projectDir);
|
|
89
|
+
const traceStateParts = [`prj:${projectName}`, `sid:${sessionId}`];
|
|
90
|
+
if (activityId) {
|
|
91
|
+
traceStateParts.push(`aid:${activityId}`);
|
|
92
|
+
}
|
|
93
|
+
traceStateParts.push(`vid:${verificationId}`);
|
|
94
|
+
const traceState = `ironbee=${traceStateParts.join(";")}`;
|
|
95
|
+
const config = (0, config_1.loadConfig)(projectDir);
|
|
96
|
+
// tool_input is Record<string,unknown> | string | undefined; for MCP devtools
|
|
97
|
+
// matcher-routed tools it's always a Record (no custom_tool_call MCPs).
|
|
98
|
+
const baseInput = (input.tool_input && typeof input.tool_input === "object")
|
|
99
|
+
? input.tool_input
|
|
100
|
+
: {};
|
|
101
|
+
const updatedInput = { ...baseInput };
|
|
102
|
+
const metadata = {
|
|
103
|
+
projectName,
|
|
104
|
+
sessionId,
|
|
105
|
+
activityId,
|
|
106
|
+
verificationId,
|
|
107
|
+
traceId,
|
|
108
|
+
traceState,
|
|
109
|
+
toolCallId: (0, crypto_1.randomUUID)(),
|
|
110
|
+
};
|
|
111
|
+
if (input.tool_use_id) {
|
|
112
|
+
metadata.toolUseId = input.tool_use_id;
|
|
113
|
+
}
|
|
114
|
+
metadata.mcpServer = mcpServer ?? "browser-devtools";
|
|
115
|
+
const userEmail = (0, session_state_1.getUserEmail)(sessionDir);
|
|
116
|
+
if (userEmail) {
|
|
117
|
+
metadata.userEmail = userEmail;
|
|
118
|
+
}
|
|
119
|
+
if (config.collector?.url) {
|
|
120
|
+
metadata.collectorUrl = config.collector.url;
|
|
121
|
+
}
|
|
122
|
+
if (config.collector?.apiKey) {
|
|
123
|
+
metadata.collectorApiKey = config.collector.apiKey;
|
|
124
|
+
}
|
|
125
|
+
updatedInput._metadata = metadata;
|
|
126
|
+
process.stdout.write(JSON.stringify({
|
|
127
|
+
hookSpecificOutput: {
|
|
128
|
+
hookEventName: "PreToolUse",
|
|
129
|
+
permissionDecision: "allow",
|
|
130
|
+
updatedInput,
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
logger_1.logger.debug(`require-verification: allowed ${toolName} with _metadata`);
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=require-verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/require-verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex — SessionStart hook adapter
|
|
3
|
+
*
|
|
4
|
+
* Appends a `session_start` entry to actions.jsonl, populates session-state
|
|
5
|
+
* with auth info from `~/.codex/auth.json` (cleaner than Claude — explicit
|
|
6
|
+
* `auth_mode` enum vs JWT decode), then runs the standard reconcile pass to
|
|
7
|
+
* close any abandoned cycles from a prior session.
|
|
8
|
+
*/
|
|
9
|
+
export declare function run(projectDir: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=session-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E3D"}
|