@ironbee-ai/cli 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +167 -39
- package/dist/analysis/code-changes.js +3 -3
- package/dist/analysis/code-changes.js.map +1 -1
- package/dist/analysis/cross-session.js.map +1 -1
- package/dist/analysis/fix-effectiveness.js.map +1 -1
- package/dist/analysis/time-analysis.js.map +1 -1
- package/dist/analysis/verdict-details.js.map +1 -1
- package/dist/analysis/verification-quality.js.map +1 -1
- package/dist/analytics/classifier.d.ts +99 -0
- package/dist/analytics/classifier.d.ts.map +1 -0
- package/dist/analytics/classifier.js +380 -0
- package/dist/analytics/classifier.js.map +1 -0
- package/dist/analytics/emit.d.ts +67 -0
- package/dist/analytics/emit.d.ts.map +1 -0
- package/dist/analytics/emit.js +901 -0
- package/dist/analytics/emit.js.map +1 -0
- package/dist/analytics/errors.d.ts +33 -0
- package/dist/analytics/errors.d.ts.map +1 -0
- package/dist/analytics/errors.js +93 -0
- package/dist/analytics/errors.js.map +1 -0
- package/dist/analytics/hook-trigger.d.ts +39 -0
- package/dist/analytics/hook-trigger.d.ts.map +1 -0
- package/dist/analytics/hook-trigger.js +127 -0
- package/dist/analytics/hook-trigger.js.map +1 -0
- package/dist/analytics/log.d.ts +44 -0
- package/dist/analytics/log.d.ts.map +1 -0
- package/dist/analytics/log.js +158 -0
- package/dist/analytics/log.js.map +1 -0
- package/dist/analytics/merge.d.ts +40 -0
- package/dist/analytics/merge.d.ts.map +1 -0
- package/dist/analytics/merge.js +527 -0
- package/dist/analytics/merge.js.map +1 -0
- package/dist/analytics/pricing.d.ts +149 -0
- package/dist/analytics/pricing.d.ts.map +1 -0
- package/dist/analytics/pricing.js +179 -0
- package/dist/analytics/pricing.js.map +1 -0
- package/dist/analytics/projection.d.ts +356 -0
- package/dist/analytics/projection.d.ts.map +1 -0
- package/dist/analytics/projection.js +2281 -0
- package/dist/analytics/projection.js.map +1 -0
- package/dist/analytics/spawn.d.ts +28 -0
- package/dist/analytics/spawn.d.ts.map +1 -0
- package/dist/analytics/spawn.js +57 -0
- package/dist/analytics/spawn.js.map +1 -0
- package/dist/analytics/state.d.ts +58 -0
- package/dist/analytics/state.d.ts.map +1 -0
- package/dist/analytics/state.js +329 -0
- package/dist/analytics/state.js.map +1 -0
- package/dist/analytics/transcript.d.ts +150 -0
- package/dist/analytics/transcript.d.ts.map +1 -0
- package/dist/analytics/transcript.js +276 -0
- package/dist/analytics/transcript.js.map +1 -0
- package/dist/analytics/types.d.ts +875 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +31 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/clients/base.d.ts +21 -2
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/commands/ironbee-verify.md +15 -7
- package/dist/clients/claude/fragments/command-verify.node.md +33 -0
- package/dist/clients/claude/fragments/rule.node.md +29 -0
- package/dist/clients/claude/fragments/skill.node.md +77 -0
- package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
- package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/claude/hooks/activity-end.js +42 -0
- package/dist/clients/claude/hooks/activity-end.js.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts +9 -4
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +50 -12
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts +8 -3
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +17 -6
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verification.js +44 -22
- package/dist/clients/claude/hooks/require-verification.js.map +1 -1
- package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-end.js +17 -2
- package/dist/clients/claude/hooks/session-end.js.map +1 -1
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +2 -1
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
- package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
- package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +29 -20
- package/dist/clients/claude/hooks/track-action.js.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.js +18 -1
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts +4 -1
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +185 -94
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/rules/ironbee-verification.md +41 -33
- package/dist/clients/claude/skills/ironbee-verification.md +93 -76
- package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
- package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
- package/dist/clients/cursor/fragments/rule.node.md +29 -0
- package/dist/clients/cursor/fragments/skill.node.md +77 -0
- package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
- package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/activity-end.js +45 -0
- package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
- package/dist/clients/cursor/hooks/clear-verdict.d.ts +13 -4
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +59 -14
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts +8 -3
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +17 -6
- package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.js +42 -16
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-end.js +18 -2
- package/dist/clients/cursor/hooks/session-end.js.map +1 -1
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +2 -1
- package/dist/clients/cursor/hooks/session-start.js.map +1 -1
- package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
- package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
- package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
- package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/track-action.js +51 -23
- package/dist/clients/cursor/hooks/track-action.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +14 -1
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts +4 -1
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +131 -65
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
- package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
- package/dist/clients/registry.d.ts +14 -0
- package/dist/clients/registry.d.ts.map +1 -1
- package/dist/clients/registry.js +34 -0
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +40 -0
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/backend-toggle.d.ts +45 -0
- package/dist/commands/backend-toggle.d.ts.map +1 -0
- package/dist/commands/backend-toggle.js +192 -0
- package/dist/commands/backend-toggle.js.map +1 -0
- package/dist/commands/disable-backend.d.ts +14 -0
- package/dist/commands/disable-backend.d.ts.map +1 -0
- package/dist/commands/disable-backend.js +34 -0
- package/dist/commands/disable-backend.js.map +1 -0
- package/dist/commands/disable-verification.d.ts +16 -0
- package/dist/commands/disable-verification.d.ts.map +1 -0
- package/dist/commands/disable-verification.js +36 -0
- package/dist/commands/disable-verification.js.map +1 -0
- package/dist/commands/enable-backend.d.ts +15 -0
- package/dist/commands/enable-backend.d.ts.map +1 -0
- package/dist/commands/enable-backend.js +35 -0
- package/dist/commands/enable-backend.js.map +1 -0
- package/dist/commands/enable-verification.d.ts +14 -0
- package/dist/commands/enable-verification.d.ts.map +1 -0
- package/dist/commands/enable-verification.js +34 -0
- package/dist/commands/enable-verification.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +60 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/import.d.ts +39 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +369 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +15 -20
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/process-analytics.d.ts +18 -0
- package/dist/commands/process-analytics.d.ts.map +1 -0
- package/dist/commands/process-analytics.js +57 -0
- package/dist/commands/process-analytics.js.map +1 -0
- package/dist/commands/queue.d.ts +2 -3
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +2 -3
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +29 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verification-toggle.d.ts +47 -0
- package/dist/commands/verification-toggle.d.ts.map +1 -0
- package/dist/commands/verification-toggle.js +113 -0
- package/dist/commands/verification-toggle.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +28 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +77 -70
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +45 -30
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/activity-end.d.ts +20 -0
- package/dist/hooks/core/activity-end.d.ts.map +1 -0
- package/dist/hooks/core/activity-end.js +23 -0
- package/dist/hooks/core/activity-end.js.map +1 -0
- package/dist/hooks/core/file-diff.d.ts +19 -0
- package/dist/hooks/core/file-diff.d.ts.map +1 -0
- package/dist/hooks/core/file-diff.js +39 -0
- package/dist/hooks/core/file-diff.js.map +1 -0
- package/dist/hooks/core/required-tools.d.ts +30 -0
- package/dist/hooks/core/required-tools.d.ts.map +1 -0
- package/dist/hooks/core/required-tools.js +70 -0
- package/dist/hooks/core/required-tools.js.map +1 -0
- package/dist/hooks/core/session-state.d.ts +12 -3
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +59 -0
- package/dist/hooks/core/session-state.js.map +1 -1
- package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
- package/dist/hooks/core/submit-verdict.js +16 -12
- package/dist/hooks/core/submit-verdict.js.map +1 -1
- package/dist/hooks/core/tool-use-stash.d.ts +41 -0
- package/dist/hooks/core/tool-use-stash.d.ts.map +1 -0
- package/dist/hooks/core/tool-use-stash.js +82 -0
- package/dist/hooks/core/tool-use-stash.js.map +1 -0
- package/dist/hooks/core/verify-gate.d.ts +17 -3
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +315 -119
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/import/claude/analytics-runner.d.ts +42 -0
- package/dist/import/claude/analytics-runner.d.ts.map +1 -0
- package/dist/import/claude/analytics-runner.js +213 -0
- package/dist/import/claude/analytics-runner.js.map +1 -0
- package/dist/import/claude/discovery.d.ts +22 -0
- package/dist/import/claude/discovery.d.ts.map +1 -0
- package/dist/import/claude/discovery.js +197 -0
- package/dist/import/claude/discovery.js.map +1 -0
- package/dist/import/claude/encoding.d.ts +50 -0
- package/dist/import/claude/encoding.d.ts.map +1 -0
- package/dist/import/claude/encoding.js +110 -0
- package/dist/import/claude/encoding.js.map +1 -0
- package/dist/import/claude/events/file-change.d.ts +28 -0
- package/dist/import/claude/events/file-change.d.ts.map +1 -0
- package/dist/import/claude/events/file-change.js +112 -0
- package/dist/import/claude/events/file-change.js.map +1 -0
- package/dist/import/claude/events/tool-call.d.ts +61 -0
- package/dist/import/claude/events/tool-call.d.ts.map +1 -0
- package/dist/import/claude/events/tool-call.js +119 -0
- package/dist/import/claude/events/tool-call.js.map +1 -0
- package/dist/import/claude/runner.d.ts +31 -0
- package/dist/import/claude/runner.d.ts.map +1 -0
- package/dist/import/claude/runner.js +280 -0
- package/dist/import/claude/runner.js.map +1 -0
- package/dist/import/claude/summary.d.ts +23 -0
- package/dist/import/claude/summary.d.ts.map +1 -0
- package/dist/import/claude/summary.js +186 -0
- package/dist/import/claude/summary.js.map +1 -0
- package/dist/import/claude/transcript-walk.d.ts +52 -0
- package/dist/import/claude/transcript-walk.d.ts.map +1 -0
- package/dist/import/claude/transcript-walk.js +187 -0
- package/dist/import/claude/transcript-walk.js.map +1 -0
- package/dist/import/concurrent-pool.d.ts +45 -0
- package/dist/import/concurrent-pool.d.ts.map +1 -0
- package/dist/import/concurrent-pool.js +95 -0
- package/dist/import/concurrent-pool.js.map +1 -0
- package/dist/import/emitter.d.ts +29 -0
- package/dist/import/emitter.d.ts.map +1 -0
- package/dist/import/emitter.js +66 -0
- package/dist/import/emitter.js.map +1 -0
- package/dist/import/events/activity.d.ts +23 -0
- package/dist/import/events/activity.d.ts.map +1 -0
- package/dist/import/events/activity.js +45 -0
- package/dist/import/events/activity.js.map +1 -0
- package/dist/import/events/session.d.ts +24 -0
- package/dist/import/events/session.d.ts.map +1 -0
- package/dist/import/events/session.js +47 -0
- package/dist/import/events/session.js.map +1 -0
- package/dist/import/filter.d.ts +47 -0
- package/dist/import/filter.d.ts.map +1 -0
- package/dist/import/filter.js +90 -0
- package/dist/import/filter.js.map +1 -0
- package/dist/import/ids.d.ts +56 -0
- package/dist/import/ids.d.ts.map +1 -0
- package/dist/import/ids.js +87 -0
- package/dist/import/ids.js.map +1 -0
- package/dist/import/index.d.ts +29 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +52 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/marker.d.ts +20 -0
- package/dist/import/marker.d.ts.map +1 -0
- package/dist/import/marker.js +71 -0
- package/dist/import/marker.js.map +1 -0
- package/dist/import/pipeline.d.ts +41 -0
- package/dist/import/pipeline.d.ts.map +1 -0
- package/dist/import/pipeline.js +47 -0
- package/dist/import/pipeline.js.map +1 -0
- package/dist/import/progress.d.ts +20 -0
- package/dist/import/progress.d.ts.map +1 -0
- package/dist/import/progress.js +69 -0
- package/dist/import/progress.js.map +1 -0
- package/dist/import/skip.d.ts +13 -0
- package/dist/import/skip.d.ts.map +1 -0
- package/dist/import/skip.js +24 -0
- package/dist/import/skip.js.map +1 -0
- package/dist/import/types.d.ts +125 -0
- package/dist/import/types.d.ts.map +1 -0
- package/dist/import/types.js +28 -0
- package/dist/import/types.js.map +1 -0
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/collector.d.ts +29 -3
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +118 -8
- package/dist/lib/collector.js.map +1 -1
- package/dist/lib/config.d.ts +240 -83
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +482 -89
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/event.d.ts +72 -0
- package/dist/lib/event.d.ts.map +1 -0
- package/dist/lib/event.js +42 -0
- package/dist/lib/event.js.map +1 -0
- package/dist/lib/gitignore.d.ts +21 -0
- package/dist/lib/gitignore.d.ts.map +1 -0
- package/dist/lib/gitignore.js +54 -0
- package/dist/lib/gitignore.js.map +1 -0
- package/dist/lib/runtime-section.d.ts +118 -0
- package/dist/lib/runtime-section.d.ts.map +1 -0
- package/dist/lib/runtime-section.js +256 -0
- package/dist/lib/runtime-section.js.map +1 -0
- package/dist/lib/telemetry.d.ts +1 -1
- package/dist/lib/telemetry.d.ts.map +1 -1
- package/dist/lib/telemetry.js +4 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/queue/dead-letter.d.ts +5 -1
- package/dist/queue/dead-letter.d.ts.map +1 -1
- package/dist/queue/dead-letter.js +5 -1
- package/dist/queue/dead-letter.js.map +1 -1
- package/dist/queue/drain.d.ts +3 -2
- package/dist/queue/drain.d.ts.map +1 -1
- package/dist/queue/drain.js +3 -2
- package/dist/queue/drain.js.map +1 -1
- package/dist/queue/flush.d.ts +28 -12
- package/dist/queue/flush.d.ts.map +1 -1
- package/dist/queue/flush.js +43 -18
- package/dist/queue/flush.js.map +1 -1
- package/dist/queue/handlers/send-event.d.ts.map +1 -1
- package/dist/queue/handlers/send-event.js.map +1 -1
- package/dist/queue/index.d.ts +1 -2
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +2 -2
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/paths.d.ts +4 -2
- package/dist/queue/paths.d.ts.map +1 -1
- package/dist/queue/paths.js +4 -2
- package/dist/queue/paths.js.map +1 -1
- package/dist/queue/process-file.d.ts +5 -1
- package/dist/queue/process-file.d.ts.map +1 -1
- package/dist/queue/process-file.js +5 -1
- package/dist/queue/process-file.js.map +1 -1
- package/dist/queue/snapshot.d.ts +4 -1
- package/dist/queue/snapshot.d.ts.map +1 -1
- package/dist/queue/snapshot.js +4 -1
- package/dist/queue/snapshot.js.map +1 -1
- package/dist/queue/spawn.d.ts +1 -3
- package/dist/queue/spawn.d.ts.map +1 -1
- package/dist/queue/spawn.js +1 -3
- package/dist/queue/spawn.js.map +1 -1
- package/dist/queue/submit.d.ts +6 -1
- package/dist/queue/submit.d.ts.map +1 -1
- package/dist/queue/submit.js +6 -1
- package/dist/queue/submit.js.map +1 -1
- package/dist/queue/types.d.ts +5 -1
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/queue/types.js +5 -1
- package/dist/queue/types.js.map +1 -1
- package/dist/queue/worker-log.d.ts +3 -1
- package/dist/queue/worker-log.d.ts.map +1 -1
- package/dist/queue/worker-log.js +3 -1
- package/dist/queue/worker-log.js.map +1 -1
- package/package.json +3 -1
|
@@ -2,9 +2,18 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* IronBee Stop Hook — Core Verification Logic
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Multi-cycle gate. For each Stop hook run:
|
|
6
|
+
* 1. Determine active cycles by matching file_change paths against each
|
|
7
|
+
* cycle's pattern set (`browser`, `backend.<runtime>`, …).
|
|
8
|
+
* 2. For each active cycle, verify the agent ran its required tools using
|
|
9
|
+
* the alwaysRequired + evidencePaths satisfier.
|
|
10
|
+
* 3. Read and parse the single verdict.json.
|
|
11
|
+
* 4. For each active cycle, validate the cycle-specific evidence fields.
|
|
12
|
+
* 5. Combinator: AND. Any cycle's failure (tools or evidence) blocks the
|
|
13
|
+
* whole gate; verdict status `pass` is overridden to fail when evidence
|
|
14
|
+
* fails — the status field is the agent's claim, not the source of truth.
|
|
15
|
+
* 6. Single global retry counter. Single verdict file. Single combined
|
|
16
|
+
* block message listing per-cycle failure reasons.
|
|
8
17
|
*/
|
|
9
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
19
|
exports.runVerifyGate = runVerifyGate;
|
|
@@ -13,8 +22,22 @@ const logger_1 = require("../../lib/logger");
|
|
|
13
22
|
const telemetry_1 = require("../../lib/telemetry");
|
|
14
23
|
const actions_1 = require("./actions");
|
|
15
24
|
const session_state_1 = require("./session-state");
|
|
25
|
+
const config_1 = require("../../lib/config");
|
|
26
|
+
const required_tools_1 = require("./required-tools");
|
|
16
27
|
const DEFAULT_MAX_RETRIES = 3;
|
|
17
|
-
|
|
28
|
+
const BROWSER_MCP_SERVER = "browser-devtools";
|
|
29
|
+
/** Maps cycle name → MCP server name used to filter `tool_call` events. */
|
|
30
|
+
function mcpServerForCycle(cycle) {
|
|
31
|
+
if (cycle === "browser") {
|
|
32
|
+
return BROWSER_MCP_SERVER;
|
|
33
|
+
}
|
|
34
|
+
const server = config_1.RUNTIME_TO_SERVER[cycle];
|
|
35
|
+
if (server === undefined) {
|
|
36
|
+
throw new Error(`No MCP server registered for cycle '${cycle}'.`);
|
|
37
|
+
}
|
|
38
|
+
return server;
|
|
39
|
+
}
|
|
40
|
+
function verdictExampleBrowserPass(sessionId) {
|
|
18
41
|
return JSON.stringify({
|
|
19
42
|
session_id: sessionId,
|
|
20
43
|
status: "pass",
|
|
@@ -24,7 +47,7 @@ function verdictExamplePass(sessionId) {
|
|
|
24
47
|
network_failures: 0,
|
|
25
48
|
});
|
|
26
49
|
}
|
|
27
|
-
function
|
|
50
|
+
function verdictExampleBrowserFail(sessionId) {
|
|
28
51
|
return JSON.stringify({
|
|
29
52
|
session_id: sessionId,
|
|
30
53
|
status: "fail",
|
|
@@ -35,18 +58,19 @@ function verdictExampleFail(sessionId) {
|
|
|
35
58
|
issues: ["button click handler not firing", "TypeError in console"],
|
|
36
59
|
});
|
|
37
60
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
function verdictExampleNodePass(sessionId) {
|
|
62
|
+
return JSON.stringify({
|
|
63
|
+
session_id: sessionId,
|
|
64
|
+
status: "pass",
|
|
65
|
+
checks: ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"],
|
|
66
|
+
backend_node_processes_connected: ["pid:12345 (next-server)"],
|
|
67
|
+
backend_node_probes_set: [
|
|
68
|
+
{ type: "tracepoint", location: "src/api/orders.ts:42", triggered: true },
|
|
69
|
+
],
|
|
70
|
+
backend_node_probe_snapshots_collected: 1,
|
|
71
|
+
backend_node_log_errors: [],
|
|
72
|
+
});
|
|
73
|
+
}
|
|
50
74
|
function cleanup(...files) {
|
|
51
75
|
for (const f of files) {
|
|
52
76
|
try {
|
|
@@ -59,42 +83,191 @@ function cleanup(...files) {
|
|
|
59
83
|
}
|
|
60
84
|
}
|
|
61
85
|
}
|
|
86
|
+
/** Compute the active cycle set across all `file_change` events since the last marker. */
|
|
87
|
+
function computeActiveCycles(actionsFile, config) {
|
|
88
|
+
const fileChanges = (0, actions_1.getFileChangesSinceLastVerification)(actionsFile);
|
|
89
|
+
const cycles = new Set();
|
|
90
|
+
for (const fc of fileChanges) {
|
|
91
|
+
for (const cycle of (0, config_1.getActiveCycles)(fc.file_path, config)) {
|
|
92
|
+
cycles.add(cycle);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Stable order: browser first, then registered backend runtimes.
|
|
96
|
+
const ordered = [];
|
|
97
|
+
if (cycles.has("browser")) {
|
|
98
|
+
ordered.push("browser");
|
|
99
|
+
}
|
|
100
|
+
for (const server of config_1.BACKEND_SERVERS) {
|
|
101
|
+
const runtime = Object.keys(config_1.RUNTIME_TO_SERVER).find((k) => config_1.RUNTIME_TO_SERVER[k] === server);
|
|
102
|
+
if (runtime !== undefined && cycles.has(runtime)) {
|
|
103
|
+
ordered.push(runtime);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return ordered;
|
|
107
|
+
}
|
|
108
|
+
function checkCycleTools(cycle, toolCalls, config) {
|
|
109
|
+
const server = mcpServerForCycle(cycle);
|
|
110
|
+
const used = new Set(toolCalls
|
|
111
|
+
.filter((t) => t.tool_type === "mcp" && t.mcp_server === server)
|
|
112
|
+
.map((t) => t.tool_name));
|
|
113
|
+
const cycleConfig = (0, config_1.getRequiredToolsConfig)(config, cycle);
|
|
114
|
+
return {
|
|
115
|
+
cycle,
|
|
116
|
+
result: (0, required_tools_1.satisfyRequiredTools)(used, cycleConfig),
|
|
117
|
+
config: cycleConfig,
|
|
118
|
+
usedCount: used.size,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function checkBrowserEvidence(verdict) {
|
|
122
|
+
if (!Array.isArray(verdict.pages_tested) || verdict.pages_tested.length === 0) {
|
|
123
|
+
return { cycle: "browser", valid: false, reason: "missing pages_tested" };
|
|
124
|
+
}
|
|
125
|
+
if (!Array.isArray(verdict.checks) || verdict.checks.length === 0) {
|
|
126
|
+
return { cycle: "browser", valid: false, reason: "missing checks" };
|
|
127
|
+
}
|
|
128
|
+
if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
|
|
129
|
+
return { cycle: "browser", valid: false, reason: "missing console_errors or network_failures (must be numbers)" };
|
|
130
|
+
}
|
|
131
|
+
// status=pass criteria — no console errors, no network failures
|
|
132
|
+
const consoleErrors = verdict.console_errors;
|
|
133
|
+
const networkFailures = verdict.network_failures;
|
|
134
|
+
if (consoleErrors > 0 || networkFailures > 0) {
|
|
135
|
+
return {
|
|
136
|
+
cycle: "browser",
|
|
137
|
+
valid: true,
|
|
138
|
+
passCriteriaMet: false,
|
|
139
|
+
passReason: `console_errors=${consoleErrors}, network_failures=${networkFailures}`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return { cycle: "browser", valid: true, passCriteriaMet: true };
|
|
143
|
+
}
|
|
144
|
+
function checkNodeEvidence(verdict) {
|
|
145
|
+
const processes = verdict.backend_node_processes_connected;
|
|
146
|
+
if (!Array.isArray(processes) || processes.length === 0) {
|
|
147
|
+
return { cycle: "node", valid: false, reason: "missing backend_node_processes_connected" };
|
|
148
|
+
}
|
|
149
|
+
if (!Array.isArray(verdict.checks) || verdict.checks.length === 0) {
|
|
150
|
+
return { cycle: "node", valid: false, reason: "missing checks" };
|
|
151
|
+
}
|
|
152
|
+
const probesSet = Array.isArray(verdict.backend_node_probes_set)
|
|
153
|
+
? verdict.backend_node_probes_set
|
|
154
|
+
: undefined;
|
|
155
|
+
const logErrors = Array.isArray(verdict.backend_node_log_errors)
|
|
156
|
+
? verdict.backend_node_log_errors
|
|
157
|
+
: undefined;
|
|
158
|
+
const probeEvidence = (probesSet?.length ?? 0) > 0;
|
|
159
|
+
const logEvidence = logErrors !== undefined;
|
|
160
|
+
if (!probeEvidence && !logEvidence) {
|
|
161
|
+
return {
|
|
162
|
+
cycle: "node",
|
|
163
|
+
valid: false,
|
|
164
|
+
reason: "no evidence — provide backend_node_probes_set OR backend_node_log_errors",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// status=pass criteria
|
|
168
|
+
const reasons = [];
|
|
169
|
+
if (probeEvidence) {
|
|
170
|
+
const triggered = (probesSet ?? []).some((p) => p.triggered === true);
|
|
171
|
+
if (!triggered) {
|
|
172
|
+
reasons.push("no probe triggered (code path didn't execute)");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (logEvidence) {
|
|
176
|
+
if ((logErrors ?? []).length > 0) {
|
|
177
|
+
reasons.push(`backend_node_log_errors has ${(logErrors ?? []).length} entries`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (reasons.length > 0) {
|
|
181
|
+
return {
|
|
182
|
+
cycle: "node",
|
|
183
|
+
valid: true,
|
|
184
|
+
passCriteriaMet: false,
|
|
185
|
+
passReason: reasons.join("; "),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return { cycle: "node", valid: true, passCriteriaMet: true };
|
|
189
|
+
}
|
|
190
|
+
function checkCycleEvidence(cycle, verdict) {
|
|
191
|
+
if (cycle === "browser") {
|
|
192
|
+
return checkBrowserEvidence(verdict);
|
|
193
|
+
}
|
|
194
|
+
if (cycle === "node") {
|
|
195
|
+
return checkNodeEvidence(verdict);
|
|
196
|
+
}
|
|
197
|
+
// Future runtimes plug in here.
|
|
198
|
+
throw new Error(`No evidence checker registered for cycle '${cycle}'.`);
|
|
199
|
+
}
|
|
200
|
+
function describeMissingTools(check) {
|
|
201
|
+
const cap = check.cycle.charAt(0).toUpperCase() + check.cycle.slice(1);
|
|
202
|
+
if (check.result.missing.length === 0) {
|
|
203
|
+
return `${cap} cycle: ok.`;
|
|
204
|
+
}
|
|
205
|
+
const items = check.result.missing.map((m) => ` - ${m}`).join("\n");
|
|
206
|
+
if (check.config.evidencePaths.length > 0 && check.result.pathName !== undefined) {
|
|
207
|
+
return `${cap} cycle: incomplete (closest path "${check.result.pathName}", tried [${check.result.triedPaths.join(", ")}]):\n${items}`;
|
|
208
|
+
}
|
|
209
|
+
return `${cap} cycle: missing required tools:\n${items}`;
|
|
210
|
+
}
|
|
62
211
|
async function runVerifyGate(input) {
|
|
63
212
|
const { sessionId: sid, sessionDir, actionsFile, verdictFile, maxRetries: inputMaxRetries } = input;
|
|
64
213
|
const maxRetries = inputMaxRetries ?? DEFAULT_MAX_RETRIES;
|
|
214
|
+
const config = input.config ?? (0, config_1.loadConfig)(input.projectDir);
|
|
65
215
|
logger_1.logger.debug(`verify-gate: session=${sid} verdictExists=${(0, fs_1.existsSync)(verdictFile)}`);
|
|
66
|
-
// ── Check 1: Were code files
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
216
|
+
// ── Check 1: Were code files changed? ───────────────────
|
|
217
|
+
if (!(0, actions_1.hasFileChangesSinceLastVerification)(actionsFile)) {
|
|
218
|
+
// An active fix here means the agent submitted a fail verdict and
|
|
219
|
+
// never addressed it (no follow-up edits, no follow-up verify).
|
|
220
|
+
// `no_edits` allow would let them slip past — block instead and tell
|
|
221
|
+
// them to fix-and-reverify or burn through retries to maxRetries.
|
|
222
|
+
const activeFixId = (0, session_state_1.getActiveFixId)(sessionDir);
|
|
223
|
+
if (activeFixId) {
|
|
224
|
+
logger_1.logger.debug(`no code changes but active fix ${activeFixId} — blocking`);
|
|
225
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "fail_verdict_unaddressed", []);
|
|
226
|
+
return {
|
|
227
|
+
action: "block",
|
|
228
|
+
message: `VERIFICATION FAILED — unaddressed.
|
|
229
|
+
|
|
230
|
+
You submitted a fail verdict but did not address the reported issues. Either:
|
|
231
|
+
|
|
232
|
+
1. Fix the failing issues in code, then run a fresh verification cycle:
|
|
233
|
+
echo '{"session_id":"${sid}"}' | ironbee hook verification-start
|
|
234
|
+
... rerun the relevant verification tools and submit a pass verdict ...
|
|
235
|
+
|
|
236
|
+
2. Or — if the issues genuinely cannot be fixed — start another verification cycle to
|
|
237
|
+
confirm the failure (each fail counts toward maxRetries; once exhausted, the gate
|
|
238
|
+
will allow completion with the issues reported).`,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
logger_1.logger.debug("no code changes detected, allowing completion");
|
|
242
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "no_edits", []);
|
|
71
243
|
return { action: "allow" };
|
|
72
244
|
}
|
|
73
|
-
// ── Check 2:
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
245
|
+
// ── Check 2: Which cycles are active? ─────────────────────
|
|
246
|
+
const activeCycles = computeActiveCycles(actionsFile, config);
|
|
247
|
+
if (activeCycles.length === 0) {
|
|
248
|
+
logger_1.logger.debug("file changes match no cycle pattern, allowing completion");
|
|
249
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "no_cycle_active", []);
|
|
250
|
+
return { action: "allow" };
|
|
251
|
+
}
|
|
252
|
+
// ── Check 3: Required tools per active cycle ──────────────
|
|
253
|
+
const toolCalls = (0, actions_1.getToolCallsSinceLastFileChange)(actionsFile);
|
|
254
|
+
const toolChecks = activeCycles.map((cycle) => checkCycleTools(cycle, toolCalls, config));
|
|
255
|
+
const failedToolChecks = toolChecks.filter((c) => !c.result.satisfied);
|
|
256
|
+
if (failedToolChecks.length > 0) {
|
|
257
|
+
const noToolsAtAll = toolChecks.every((c) => c.usedCount === 0);
|
|
258
|
+
if (noToolsAtAll) {
|
|
259
|
+
// No verification tools used at all — full onboarding guidance.
|
|
260
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "no_tools", activeCycles);
|
|
261
|
+
const browserExample = ` echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`;
|
|
262
|
+
const browserExampleFail = ` On fail: echo '${verdictExampleBrowserFail(sid)}' | ironbee hook submit-verdict`;
|
|
263
|
+
const nodeExample = ` echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict`;
|
|
264
|
+
return {
|
|
265
|
+
action: "block",
|
|
266
|
+
message: `VERIFICATION REQUIRED.
|
|
95
267
|
|
|
96
|
-
You made code changes but did not verify them
|
|
268
|
+
You made code changes but did not verify them.
|
|
97
269
|
|
|
270
|
+
${activeCycles.includes("browser") ? `Browser cycle (UI verification):
|
|
98
271
|
1. Build and start the application if not already running
|
|
99
272
|
2. Navigate to the affected page(s)
|
|
100
273
|
3. Functionally test your changes — click, type, submit, interact with the UI to confirm the code works
|
|
@@ -103,38 +276,55 @@ You made code changes but did not verify them through the browser.
|
|
|
103
276
|
6. Check console for errors
|
|
104
277
|
7. Stop the dev server when done
|
|
105
278
|
8. Submit your verdict:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
9. If failed, fix the code and re-verify until it passes
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
279
|
+
${browserExample}
|
|
280
|
+
${browserExampleFail}
|
|
281
|
+
9. If failed, fix the code and re-verify until it passes
|
|
282
|
+
` : ""}${activeCycles.includes("node") ? `Node cycle (backend verification):
|
|
283
|
+
1. Connect to the running Node process via ndt_debug_connect
|
|
284
|
+
2. Set probes (tracepoint / logpoint / exceptionpoint) at the changed code paths
|
|
285
|
+
3. Exercise the code path so probes fire
|
|
286
|
+
4. Read snapshots via ndt_debug_get-probe-snapshots, OR inspect runtime errors via ndt_debug_get-logs
|
|
287
|
+
5. Submit your verdict:
|
|
288
|
+
${nodeExample}
|
|
289
|
+
` : ""}`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
// Partial — list what's missing.
|
|
293
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "incomplete_tools", activeCycles);
|
|
294
|
+
const summary = failedToolChecks
|
|
295
|
+
.map((c) => describeMissingTools(c))
|
|
296
|
+
.join("\n");
|
|
114
297
|
return {
|
|
115
298
|
action: "block",
|
|
116
299
|
message: `INCOMPLETE VERIFICATION.
|
|
117
300
|
|
|
118
|
-
You used the IronBee
|
|
119
|
-
|
|
301
|
+
You used the IronBee verification tools but skipped required checks:
|
|
302
|
+
|
|
303
|
+
${summary}
|
|
120
304
|
|
|
121
305
|
Run the missing tools, functionally test your changes, then submit your verdict:
|
|
122
|
-
echo '${
|
|
306
|
+
${activeCycles.includes("browser") ? ` Browser example: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict` : ""}
|
|
307
|
+
${activeCycles.includes("node") ? ` Node example: echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict` : ""}`.trim(),
|
|
123
308
|
};
|
|
124
309
|
}
|
|
125
|
-
// ── Check
|
|
310
|
+
// ── Check 4: Verdict file exists? ─────────────────────────
|
|
126
311
|
if (!(0, fs_1.existsSync)(verdictFile)) {
|
|
127
|
-
await recordMarker(actionsFile, sessionDir, sid, "block", "no_verdict");
|
|
312
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "no_verdict", activeCycles);
|
|
313
|
+
const recordingHint = (0, session_state_1.isRecordingActive)(sessionDir)
|
|
314
|
+
? "\n⚠ Recording is still active — call mcp__browser-devtools__bdt_content_stop-recording BEFORE submit-verdict (otherwise it will reject with \"recording is still active\")."
|
|
315
|
+
: "";
|
|
128
316
|
return {
|
|
129
317
|
action: "block",
|
|
130
318
|
message: `VERDICT MISSING.
|
|
131
319
|
|
|
132
|
-
You
|
|
133
|
-
|
|
134
|
-
|
|
320
|
+
You ran the verification tools but did not submit a verdict.${recordingHint}
|
|
321
|
+
|
|
322
|
+
Submit your verdict via:
|
|
323
|
+
${activeCycles.includes("browser") ? ` Browser: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict` : ""}
|
|
324
|
+
${activeCycles.includes("node") ? ` Node: echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict` : ""}`.trim(),
|
|
135
325
|
};
|
|
136
326
|
}
|
|
137
|
-
// ── Check
|
|
327
|
+
// ── Check 5: Valid JSON? ──────────────────────────────────
|
|
138
328
|
let verdict;
|
|
139
329
|
try {
|
|
140
330
|
verdict = JSON.parse((0, fs_1.readFileSync)(verdictFile, "utf-8"));
|
|
@@ -142,96 +332,101 @@ Submit your verdict:
|
|
|
142
332
|
catch (e) {
|
|
143
333
|
logger_1.logger.debug(`failed to parse verdict ${verdictFile}: ${e}`);
|
|
144
334
|
cleanup(verdictFile);
|
|
145
|
-
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
335
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
|
|
146
336
|
return {
|
|
147
337
|
action: "block",
|
|
148
|
-
message: `INVALID VERDICT.
|
|
149
|
-
echo '${
|
|
338
|
+
message: `INVALID VERDICT JSON. Re-submit valid JSON:
|
|
339
|
+
Browser example: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`,
|
|
150
340
|
};
|
|
151
341
|
}
|
|
152
|
-
// ── Check
|
|
153
|
-
const
|
|
154
|
-
const
|
|
155
|
-
if (
|
|
342
|
+
// ── Check 6: Per-cycle evidence validity ──────────────────
|
|
343
|
+
const evidenceChecks = activeCycles.map((cycle) => checkCycleEvidence(cycle, verdict));
|
|
344
|
+
const invalidEvidence = evidenceChecks.filter((c) => !c.valid);
|
|
345
|
+
if (invalidEvidence.length > 0) {
|
|
156
346
|
cleanup(verdictFile);
|
|
157
|
-
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
347
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
|
|
348
|
+
const summary = invalidEvidence
|
|
349
|
+
.map((c) => ` - ${c.cycle} cycle: ${c.reason}`)
|
|
350
|
+
.join("\n");
|
|
158
351
|
return {
|
|
159
352
|
action: "block",
|
|
160
|
-
message: `VERDICT REJECTED
|
|
353
|
+
message: `VERDICT REJECTED — missing evidence:
|
|
354
|
+
${summary}
|
|
161
355
|
|
|
162
|
-
|
|
163
|
-
Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
|
|
356
|
+
Re-submit a complete verdict.`,
|
|
164
357
|
};
|
|
165
358
|
}
|
|
166
|
-
|
|
359
|
+
// ── Check 7: Status interpretation + pass-criteria override ──
|
|
360
|
+
const status = verdict.status;
|
|
361
|
+
if (status !== "pass" && status !== "fail") {
|
|
167
362
|
cleanup(verdictFile);
|
|
168
|
-
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
363
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
|
|
169
364
|
return {
|
|
170
365
|
action: "block",
|
|
171
|
-
message: `VERDICT
|
|
172
|
-
|
|
173
|
-
Your verdict must describe what you functionally tested.
|
|
174
|
-
Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
|
|
366
|
+
message: `INVALID VERDICT STATUS: "${status}". Status must be "pass" or "fail".
|
|
367
|
+
echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`,
|
|
175
368
|
};
|
|
176
369
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
Your verdict must include error counts.
|
|
185
|
-
Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
|
|
186
|
-
};
|
|
370
|
+
// pass override: claimed pass but cycle pass-criteria failed → treat as fail
|
|
371
|
+
const passCriteriaFailures = evidenceChecks.filter((c) => c.passCriteriaMet === false);
|
|
372
|
+
const effectiveStatus = (status === "pass" && passCriteriaFailures.length === 0) ? "pass" : "fail";
|
|
373
|
+
if (status === "pass" && effectiveStatus === "fail") {
|
|
374
|
+
logger_1.logger.debug(`verify-gate: status=pass overridden to fail by cycle pass-criteria: ${passCriteriaFailures
|
|
375
|
+
.map((c) => c.cycle)
|
|
376
|
+
.join(",")}`);
|
|
187
377
|
}
|
|
188
|
-
|
|
189
|
-
if (verdict.status === "pass") {
|
|
378
|
+
if (effectiveStatus === "pass") {
|
|
190
379
|
logger_1.logger.debug("verdict passed, allowing completion");
|
|
191
380
|
(0, session_state_1.resetRetries)(sessionDir);
|
|
192
|
-
await recordMarker(actionsFile, sessionDir, sid, "allow", "verdict_pass");
|
|
381
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "verdict_pass", activeCycles);
|
|
193
382
|
return { action: "allow" };
|
|
194
383
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
await recordMarker(actionsFile, sessionDir, sid, "allow", "max_retries_exceeded");
|
|
202
|
-
return {
|
|
203
|
-
action: "allow",
|
|
204
|
-
message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
|
|
205
|
-
|
|
206
|
-
Unresolved issues:
|
|
207
|
-
- ${issues}
|
|
208
|
-
|
|
209
|
-
Report these issues in your final response.`,
|
|
210
|
-
};
|
|
384
|
+
// effectiveStatus === "fail" — either claimed fail, or pass overridden
|
|
385
|
+
const retries = (0, session_state_1.incrementRetries)(sessionDir);
|
|
386
|
+
const issuesList = [];
|
|
387
|
+
if (Array.isArray(verdict.issues)) {
|
|
388
|
+
for (const i of verdict.issues) {
|
|
389
|
+
issuesList.push(String(i));
|
|
211
390
|
}
|
|
391
|
+
}
|
|
392
|
+
for (const c of passCriteriaFailures) {
|
|
393
|
+
issuesList.push(`[${c.cycle}] ${c.passReason ?? "pass criteria not met"}`);
|
|
394
|
+
}
|
|
395
|
+
if (issuesList.length === 0) {
|
|
396
|
+
issuesList.push("unknown");
|
|
397
|
+
}
|
|
398
|
+
const issues = issuesList.join("\n - ");
|
|
399
|
+
if (retries >= maxRetries) {
|
|
212
400
|
cleanup(verdictFile);
|
|
213
|
-
|
|
401
|
+
(0, session_state_1.resetRetries)(sessionDir);
|
|
402
|
+
// The agent has run out of retries — close any dangling fix cycle so
|
|
403
|
+
// every fix_start has a matching fix_end before we hand control back.
|
|
404
|
+
await (0, session_state_1.closeOpenCycles)(sessionDir, actionsFile, "max_retries_exceeded");
|
|
405
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "max_retries_exceeded", activeCycles);
|
|
214
406
|
return {
|
|
215
|
-
action: "
|
|
216
|
-
message: `VERIFICATION FAILED
|
|
407
|
+
action: "allow",
|
|
408
|
+
message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
|
|
217
409
|
|
|
218
|
-
|
|
410
|
+
Unresolved issues:
|
|
219
411
|
- ${issues}
|
|
220
412
|
|
|
221
|
-
|
|
222
|
-
Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
|
|
413
|
+
Report these issues in your final response.`,
|
|
223
414
|
};
|
|
224
415
|
}
|
|
225
|
-
// ── Unknown status ─────────────────────────────────────
|
|
226
416
|
cleanup(verdictFile);
|
|
227
|
-
await recordMarker(actionsFile, sessionDir, sid, "block", "
|
|
417
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "verdict_fail", activeCycles);
|
|
228
418
|
return {
|
|
229
419
|
action: "block",
|
|
230
|
-
message: `
|
|
231
|
-
|
|
420
|
+
message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
|
|
421
|
+
|
|
422
|
+
Issues found:
|
|
423
|
+
- ${issues}
|
|
424
|
+
|
|
425
|
+
Fix the issues, rebuild if needed, re-test functionally, and re-verify.
|
|
426
|
+
Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
|
|
232
427
|
};
|
|
233
428
|
}
|
|
234
|
-
async function recordMarker(actionsFile, sessionDir, sessionId, action, reason) {
|
|
429
|
+
async function recordMarker(actionsFile, sessionDir, sessionId, action, reason, modes) {
|
|
235
430
|
const marker = {
|
|
236
431
|
...(0, actions_1.baseFields)(actionsFile),
|
|
237
432
|
type: "verification_requested",
|
|
@@ -239,6 +434,7 @@ async function recordMarker(actionsFile, sessionDir, sessionId, action, reason)
|
|
|
239
434
|
activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
|
|
240
435
|
action,
|
|
241
436
|
reason,
|
|
437
|
+
modes: modes.length > 0 ? modes : undefined,
|
|
242
438
|
};
|
|
243
439
|
await (0, actions_1.appendAction)(actionsFile, marker);
|
|
244
440
|
await (0, telemetry_1.trackVerificationRequested)(sessionId, action, reason);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee CLI — Import Analytics Runner
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the analytics derivation primitives (`projection.ts`,
|
|
5
|
+
* `merge.ts`) for a full transcript read end-to-end. Mirrors the live
|
|
6
|
+
* `src/analytics/emit.ts:emitAnalytics` orchestrator BUT:
|
|
7
|
+
*
|
|
8
|
+
* - never reads `state.json` (initializes fresh in-memory state)
|
|
9
|
+
* - never writes `state.json` (no persistence)
|
|
10
|
+
* - always treats the slice as final (`is_final: true`)
|
|
11
|
+
* - skips reset detection / idempotency / carve-out paths (full re-parse)
|
|
12
|
+
*
|
|
13
|
+
* This module: fork rather than `if (importMode)` branching
|
|
14
|
+
* inside `emit.ts` to honor the isolation contract.
|
|
15
|
+
*
|
|
16
|
+
* Returns the full set of analytics events the pipeline should POST. The
|
|
17
|
+
* pipeline is responsible for batching POST and writing the marker.
|
|
18
|
+
*/
|
|
19
|
+
import { APIRequestEvent, SessionAnalyticsEvent, SessionTurnEvent, SessionTurnStepEvent } from "../../analytics/types";
|
|
20
|
+
export interface AnalyticsRunnerInput {
|
|
21
|
+
sessionId: string;
|
|
22
|
+
projectName: string;
|
|
23
|
+
/** Pre-existing — used to gate config flag reads. */
|
|
24
|
+
projectDir: string;
|
|
25
|
+
transcriptPath: string;
|
|
26
|
+
/** Surfaced on `session_analytics.end_reason`. Defaults to `"import"`. */
|
|
27
|
+
endReason?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface AnalyticsRunnerOutput {
|
|
30
|
+
sessionAnalytics: SessionAnalyticsEvent;
|
|
31
|
+
turnEvents: SessionTurnEvent[];
|
|
32
|
+
stepEvents: SessionTurnStepEvent[];
|
|
33
|
+
apiRequestEvents: APIRequestEvent[];
|
|
34
|
+
/** The full transcript byte size — written into the import marker. */
|
|
35
|
+
transcriptOffset: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Run the full transcript through the analytics pipeline and return every
|
|
39
|
+
* derivable wire event. Throws on read/parse errors.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runImportAnalytics(input: AnalyticsRunnerInput): AnalyticsRunnerOutput;
|
|
42
|
+
//# sourceMappingURL=analytics-runner.d.ts.map
|