@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
package/dist/lib/collector.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* Both are no-ops when `IRONBEE_COLLECTOR=false` is set (jest harness).
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { Event } from "./event";
|
|
20
20
|
export interface CollectorTarget {
|
|
21
21
|
url: string;
|
|
22
22
|
apiKey?: string;
|
|
@@ -26,6 +26,12 @@ export interface CollectorTarget {
|
|
|
26
26
|
* Undefined → handler falls back to its built-in default (100).
|
|
27
27
|
*/
|
|
28
28
|
batchSize?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Per-request HTTP timeout in milliseconds for the BATCH send path.
|
|
31
|
+
* Populated from `config.collector.timeoutMs`. Undefined → callers fall
|
|
32
|
+
* back to `BATCH_SEND_TIMEOUT_MS` (10000ms).
|
|
33
|
+
*/
|
|
34
|
+
timeoutMs?: number;
|
|
29
35
|
}
|
|
30
36
|
export interface PostEventsResult {
|
|
31
37
|
status: number;
|
|
@@ -37,7 +43,7 @@ export interface PostEventsResult {
|
|
|
37
43
|
* connect timeout, or socket timeout. Does NOT throw on non-2xx — callers
|
|
38
44
|
* decide what HTTP status means for their use case.
|
|
39
45
|
*/
|
|
40
|
-
export declare function postEventsBatch(events:
|
|
46
|
+
export declare function postEventsBatch(events: Event[], target: CollectorTarget, opts?: {
|
|
41
47
|
timeoutMs?: number;
|
|
42
48
|
}): Promise<PostEventsResult>;
|
|
43
49
|
/**
|
|
@@ -66,5 +72,25 @@ export declare function getCollectorTarget(projectDir?: string): CollectorTarget
|
|
|
66
72
|
* lifecycle events made it to the collector. The line carries the event id
|
|
67
73
|
* and type to make grep'ing trivial; it does not include payload content.
|
|
68
74
|
*/
|
|
69
|
-
export declare function sendToCollector(entry:
|
|
75
|
+
export declare function sendToCollector(entry: Event, _sessionId: string, projectDir: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Batched companion of {@link sendToCollector}. POSTs an entire array of
|
|
78
|
+
* events in a single HTTP request — collapses an N-event drain from N
|
|
79
|
+
* RTTs to 1 RTT, fitting comfortably inside hook timeouts that single-
|
|
80
|
+
* event drains overflow.
|
|
81
|
+
*
|
|
82
|
+
* Resolves on a 2xx response; rejects on network / timeout / non-2xx.
|
|
83
|
+
* Per-event id/timestamp/etc. are expected to be already populated on
|
|
84
|
+
* each entry (callers spread `baseFields()` and override `id` per event).
|
|
85
|
+
*
|
|
86
|
+
* Silent no-op when the collector isn't configured (mirrors
|
|
87
|
+
* `sendToCollector`).
|
|
88
|
+
*/
|
|
89
|
+
export declare function sendEventsBatchToCollector(entries: Event[], _sessionId: string, projectDir: string,
|
|
90
|
+
/**
|
|
91
|
+
* Optional pre-resolved target — lets callers (e.g. analytics emit) avoid
|
|
92
|
+
* re-resolving config across N batches per drain. When omitted, falls
|
|
93
|
+
* back to {@link getCollectorTarget} like the single-event path does.
|
|
94
|
+
*/
|
|
95
|
+
preResolvedTarget?: CollectorTarget | null): Promise<void>;
|
|
70
96
|
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAgBhC,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiE3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA+B9E;AAUD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAC5C,OAAO,EAAE,KAAK,EAAE,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;AAClB;;;;GAIG;AACH,iBAAiB,CAAC,EAAE,eAAe,GAAG,IAAI,GAC3C,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
package/dist/lib/collector.js
CHANGED
|
@@ -21,11 +21,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
21
21
|
exports.postEventsBatch = postEventsBatch;
|
|
22
22
|
exports.getCollectorTarget = getCollectorTarget;
|
|
23
23
|
exports.sendToCollector = sendToCollector;
|
|
24
|
+
exports.sendEventsBatchToCollector = sendEventsBatchToCollector;
|
|
24
25
|
const https_1 = require("https");
|
|
25
26
|
const http_1 = require("http");
|
|
26
27
|
const config_1 = require("./config");
|
|
27
28
|
const logger_1 = require("./logger");
|
|
28
29
|
const SEND_TIMEOUT_MS = 3000;
|
|
30
|
+
/**
|
|
31
|
+
* Default per-request HTTP timeout for the BATCH path
|
|
32
|
+
* ({@link sendEventsBatchToCollector}). Single-event sends keep
|
|
33
|
+
* SEND_TIMEOUT_MS (3000) — they ride hooks where blocking is bad. Batches
|
|
34
|
+
* carry hundreds of KB on long sessions and need a longer ceiling on slow
|
|
35
|
+
* uplinks. Tunable per project via `config.collector.timeoutMs` (clamped
|
|
36
|
+
* to [1000, 60000]).
|
|
37
|
+
*/
|
|
38
|
+
const BATCH_SEND_TIMEOUT_MS = 10000;
|
|
39
|
+
const TIMEOUT_MS_MIN = 1000;
|
|
40
|
+
const TIMEOUT_MS_MAX = 60000;
|
|
29
41
|
const EVENTS_PATH = "/v1/events";
|
|
30
42
|
/**
|
|
31
43
|
* Low-level transport: POST a JSON array of events to the collector and
|
|
@@ -36,13 +48,34 @@ const EVENTS_PATH = "/v1/events";
|
|
|
36
48
|
async function postEventsBatch(events, target, opts) {
|
|
37
49
|
const timeoutMs = opts?.timeoutMs ?? SEND_TIMEOUT_MS;
|
|
38
50
|
return new Promise((resolve, reject) => {
|
|
51
|
+
// Single-settle guard. The Node http response can fire BOTH
|
|
52
|
+
// "end" and "close" (close can fire after end on some Node
|
|
53
|
+
// versions, or instead of end on early disconnects). Without
|
|
54
|
+
// this, the second handler still computes work but the Promise
|
|
55
|
+
// ignores it; with this, the second handler is a no-op and we
|
|
56
|
+
// cleanly settle exactly once.
|
|
57
|
+
let settled = false;
|
|
58
|
+
const settleResolve = (r) => {
|
|
59
|
+
if (settled) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
settled = true;
|
|
63
|
+
resolve(r);
|
|
64
|
+
};
|
|
65
|
+
const settleReject = (e) => {
|
|
66
|
+
if (settled) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
settled = true;
|
|
70
|
+
reject(e);
|
|
71
|
+
};
|
|
39
72
|
try {
|
|
40
73
|
const body = JSON.stringify(events);
|
|
41
74
|
const url = new URL(EVENTS_PATH, target.url);
|
|
42
75
|
const isHttps = url.protocol === "https:";
|
|
43
76
|
const doRequest = isHttps ? https_1.request : http_1.request;
|
|
44
77
|
const timer = setTimeout(() => {
|
|
45
|
-
|
|
78
|
+
settleReject(new Error("collector: send timeout"));
|
|
46
79
|
}, timeoutMs);
|
|
47
80
|
const req = doRequest({
|
|
48
81
|
hostname: url.hostname,
|
|
@@ -61,20 +94,20 @@ async function postEventsBatch(events, target, opts) {
|
|
|
61
94
|
res.on("data", (d) => { chunks += d; });
|
|
62
95
|
res.on("end", () => {
|
|
63
96
|
clearTimeout(timer);
|
|
64
|
-
|
|
97
|
+
settleResolve({ status: res.statusCode ?? 0, body: chunks });
|
|
65
98
|
});
|
|
66
99
|
res.on("close", () => {
|
|
67
100
|
clearTimeout(timer);
|
|
68
|
-
|
|
101
|
+
settleResolve({ status: res.statusCode ?? 0, body: chunks });
|
|
69
102
|
});
|
|
70
103
|
});
|
|
71
|
-
req.on("error", (err) => { clearTimeout(timer);
|
|
72
|
-
req.on("timeout", () => { clearTimeout(timer); req.destroy();
|
|
104
|
+
req.on("error", (err) => { clearTimeout(timer); settleReject(err); });
|
|
105
|
+
req.on("timeout", () => { clearTimeout(timer); req.destroy(); settleReject(new Error("collector: request timeout")); });
|
|
73
106
|
req.write(body);
|
|
74
107
|
req.end();
|
|
75
108
|
}
|
|
76
109
|
catch (e) {
|
|
77
|
-
|
|
110
|
+
settleReject(e instanceof Error ? e : new Error(String(e)));
|
|
78
111
|
}
|
|
79
112
|
});
|
|
80
113
|
}
|
|
@@ -109,12 +142,28 @@ function getCollectorTarget(projectDir) {
|
|
|
109
142
|
if (typeof section.url !== "string" || section.url.length === 0) {
|
|
110
143
|
return null;
|
|
111
144
|
}
|
|
145
|
+
// apiKey is required — keeps the "configured" state aligned with
|
|
146
|
+
// `isCollectorConfigured` (which the auto-enable path for jobQueue /
|
|
147
|
+
// recording / analytics keys off). Without it we'd resolve a target,
|
|
148
|
+
// POST without auth, and get 401s while telling the operator everything
|
|
149
|
+
// is configured. Better to fail the preflight here.
|
|
150
|
+
if (typeof section.apiKey !== "string" || section.apiKey.length === 0) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
112
153
|
return {
|
|
113
154
|
url: section.url,
|
|
114
155
|
apiKey: section.apiKey,
|
|
115
156
|
batchSize: typeof section.batchSize === "number" ? section.batchSize : undefined,
|
|
157
|
+
timeoutMs: typeof section.timeoutMs === "number" ? clampTimeoutMs(section.timeoutMs) : undefined,
|
|
116
158
|
};
|
|
117
159
|
}
|
|
160
|
+
/** Clamp a configured timeout to the safe operational band. */
|
|
161
|
+
function clampTimeoutMs(value) {
|
|
162
|
+
if (!Number.isFinite(value)) {
|
|
163
|
+
return BATCH_SEND_TIMEOUT_MS;
|
|
164
|
+
}
|
|
165
|
+
return Math.min(TIMEOUT_MS_MAX, Math.max(TIMEOUT_MS_MIN, Math.floor(value)));
|
|
166
|
+
}
|
|
118
167
|
/**
|
|
119
168
|
* Fire-and-forget single-event send. Resolves on any HTTP response (status is
|
|
120
169
|
* intentionally ignored so a 5xx from the collector does not propagate back
|
|
@@ -135,10 +184,71 @@ async function sendToCollector(entry, _sessionId, projectDir) {
|
|
|
135
184
|
try {
|
|
136
185
|
// entry is already enriched with id/session_id/project_name/timestamp by appendAction.
|
|
137
186
|
await postEventsBatch([entry], target, { timeoutMs: SEND_TIMEOUT_MS });
|
|
138
|
-
logger_1.logger.debug(`collector: posted type=${entry.type} id=${entry.id
|
|
187
|
+
logger_1.logger.debug(`collector: posted type=${entry.type} id=${entry.id} in ${Date.now() - startedAt}ms`);
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
logger_1.logger.debug(`collector: sendToCollector failed type=${entry.type} id=${entry.id}: ${e}`);
|
|
191
|
+
throw e instanceof Error ? e : new Error(String(e));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Batched companion of {@link sendToCollector}. POSTs an entire array of
|
|
196
|
+
* events in a single HTTP request — collapses an N-event drain from N
|
|
197
|
+
* RTTs to 1 RTT, fitting comfortably inside hook timeouts that single-
|
|
198
|
+
* event drains overflow.
|
|
199
|
+
*
|
|
200
|
+
* Resolves on a 2xx response; rejects on network / timeout / non-2xx.
|
|
201
|
+
* Per-event id/timestamp/etc. are expected to be already populated on
|
|
202
|
+
* each entry (callers spread `baseFields()` and override `id` per event).
|
|
203
|
+
*
|
|
204
|
+
* Silent no-op when the collector isn't configured (mirrors
|
|
205
|
+
* `sendToCollector`).
|
|
206
|
+
*/
|
|
207
|
+
async function sendEventsBatchToCollector(entries, _sessionId, projectDir,
|
|
208
|
+
/**
|
|
209
|
+
* Optional pre-resolved target — lets callers (e.g. analytics emit) avoid
|
|
210
|
+
* re-resolving config across N batches per drain. When omitted, falls
|
|
211
|
+
* back to {@link getCollectorTarget} like the single-event path does.
|
|
212
|
+
*/
|
|
213
|
+
preResolvedTarget) {
|
|
214
|
+
if (entries.length === 0) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const target = preResolvedTarget !== undefined
|
|
218
|
+
? preResolvedTarget
|
|
219
|
+
: getCollectorTarget(projectDir);
|
|
220
|
+
if (!target) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const timeoutMs = target.timeoutMs ?? BATCH_SEND_TIMEOUT_MS;
|
|
224
|
+
const startedAt = Date.now();
|
|
225
|
+
try {
|
|
226
|
+
const result = await postEventsBatch(entries, target, { timeoutMs });
|
|
227
|
+
const ok = result.status >= 200 && result.status < 300;
|
|
228
|
+
if (!ok) {
|
|
229
|
+
// Surface the response body in the error — without it the
|
|
230
|
+
// operator just sees "HTTP 400" and has no path to diagnose
|
|
231
|
+
// which field the collector rejected. Truncate so a 10 KB
|
|
232
|
+
// error response doesn't blow up the progress reporter.
|
|
233
|
+
const BODY_CAP = 500;
|
|
234
|
+
const bodyExcerpt = result.body.length > BODY_CAP
|
|
235
|
+
? `${result.body.slice(0, BODY_CAP)}…`
|
|
236
|
+
: result.body;
|
|
237
|
+
const firstType = entries[0]?.type ?? "(empty)";
|
|
238
|
+
const typeBreakdown = {};
|
|
239
|
+
for (const e of entries) {
|
|
240
|
+
typeBreakdown[e.type] = (typeBreakdown[e.type] ?? 0) + 1;
|
|
241
|
+
}
|
|
242
|
+
const breakdownStr = Object.entries(typeBreakdown)
|
|
243
|
+
.map(([t, n]) => `${t}=${n}`)
|
|
244
|
+
.join(",");
|
|
245
|
+
throw new Error(`collector: HTTP ${result.status} for batch of ${entries.length} (first_type=${firstType}, types=${breakdownStr})`
|
|
246
|
+
+ (bodyExcerpt.length > 0 ? `: ${bodyExcerpt}` : ""));
|
|
247
|
+
}
|
|
248
|
+
logger_1.logger.debug(`collector: posted batch=${entries.length} first_type=${entries[0].type} in ${Date.now() - startedAt}ms`);
|
|
139
249
|
}
|
|
140
250
|
catch (e) {
|
|
141
|
-
logger_1.logger.debug(`collector:
|
|
251
|
+
logger_1.logger.debug(`collector: sendEventsBatchToCollector failed batch=${entries.length}: ${e}`);
|
|
142
252
|
throw e instanceof Error ? e : new Error(String(e));
|
|
143
253
|
}
|
|
144
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":"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"}
|