@ironbee-ai/cli 0.5.1 → 0.5.3
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 +1 -1
- package/dist/analysis/cross-session.d.ts +1 -1
- package/dist/analysis/cross-session.js +1 -1
- package/dist/analysis/cross-session.js.map +1 -1
- package/dist/analysis/time-analysis.js +3 -3
- package/dist/analysis/time-analysis.js.map +1 -1
- package/dist/analysis/verdict-details.d.ts +1 -1
- package/dist/clients/base.d.ts +4 -0
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/hooks/activity-start.d.ts +10 -0
- package/dist/clients/claude/hooks/activity-start.d.ts.map +1 -0
- package/dist/clients/claude/hooks/activity-start.js +31 -0
- package/dist/clients/claude/hooks/activity-start.js.map +1 -0
- package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js +17 -9
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verdict.js +4 -1
- package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verification.js +12 -1
- package/dist/clients/claude/hooks/require-verification.js.map +1 -1
- package/dist/clients/claude/hooks/session-end.d.ts +10 -0
- package/dist/clients/claude/hooks/session-end.d.ts.map +1 -0
- package/dist/clients/claude/hooks/session-end.js +44 -0
- package/dist/clients/claude/hooks/session-end.js.map +1 -0
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +4 -2
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +15 -4
- 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 +7 -3
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts +2 -0
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +34 -0
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/cursor/hooks/activity-start.d.ts +10 -0
- package/dist/clients/cursor/hooks/activity-start.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/activity-start.js +31 -0
- package/dist/clients/cursor/hooks/activity-start.js.map +1 -0
- package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js +19 -10
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verdict.js +4 -1
- 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 +12 -1
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.d.ts +10 -0
- package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/session-end.js +44 -0
- package/dist/clients/cursor/hooks/session-end.js.map +1 -0
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +4 -2
- package/dist/clients/cursor/hooks/session-start.js.map +1 -1
- package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/track-action.js +15 -4
- 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 +10 -3
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts +2 -0
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +22 -0
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/commands/analyze.js +3 -3
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/hook.js +24 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +117 -24
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +74 -1
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/activity.d.ts +20 -0
- package/dist/hooks/core/activity.d.ts.map +1 -0
- package/dist/hooks/core/activity.js +53 -0
- package/dist/hooks/core/activity.js.map +1 -0
- package/dist/hooks/core/session-state.d.ts +9 -7
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +65 -8
- 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 -4
- package/dist/hooks/core/submit-verdict.js.map +1 -1
- package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -1
- package/dist/hooks/core/verification-lifecycle.js +20 -4
- package/dist/hooks/core/verification-lifecycle.js.map +1 -1
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +18 -14
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/lib/collector.d.ts +2 -2
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +3 -12
- package/dist/lib/collector.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Activity Tracking
|
|
3
|
+
*
|
|
4
|
+
* Tracks agent active time via activity_start / activity_end pairs.
|
|
5
|
+
* activity_start is recorded on UserPromptSubmit/beforeSubmitPrompt (primary)
|
|
6
|
+
* or PreToolUse allow path (fallback). activity_end is recorded on the Stop hook.
|
|
7
|
+
* Duration is calculated from the last activity_start in actions.jsonl.
|
|
8
|
+
*/
|
|
9
|
+
export interface StartActivityInput {
|
|
10
|
+
sessionDir: string;
|
|
11
|
+
actionsFile: string;
|
|
12
|
+
source?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface EndActivityInput {
|
|
15
|
+
sessionDir: string;
|
|
16
|
+
actionsFile: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function startActivity(input: StartActivityInput): Promise<void>;
|
|
19
|
+
export declare function endActivity(input: EndActivityInput): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB5E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Activity Tracking
|
|
4
|
+
*
|
|
5
|
+
* Tracks agent active time via activity_start / activity_end pairs.
|
|
6
|
+
* activity_start is recorded on UserPromptSubmit/beforeSubmitPrompt (primary)
|
|
7
|
+
* or PreToolUse allow path (fallback). activity_end is recorded on the Stop hook.
|
|
8
|
+
* Duration is calculated from the last activity_start in actions.jsonl.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.startActivity = startActivity;
|
|
12
|
+
exports.endActivity = endActivity;
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const logger_1 = require("../../lib/logger");
|
|
15
|
+
const session_state_1 = require("./session-state");
|
|
16
|
+
const actions_1 = require("./actions");
|
|
17
|
+
async function startActivity(input) {
|
|
18
|
+
const { sessionDir, actionsFile, source } = input;
|
|
19
|
+
if ((0, session_state_1.isActive)(sessionDir)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const activityId = (0, crypto_1.randomUUID)();
|
|
23
|
+
(0, session_state_1.setActiveActivity)(sessionDir, activityId);
|
|
24
|
+
const entry = {
|
|
25
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
26
|
+
type: "activity_start",
|
|
27
|
+
timestamp: Date.now(),
|
|
28
|
+
activity_id: activityId,
|
|
29
|
+
source,
|
|
30
|
+
};
|
|
31
|
+
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
32
|
+
logger_1.logger.debug(`activity-start: ${activityId} source=${source ?? "unknown"}`);
|
|
33
|
+
}
|
|
34
|
+
async function endActivity(input) {
|
|
35
|
+
const { sessionDir, actionsFile } = input;
|
|
36
|
+
if (!(0, session_state_1.isActive)(sessionDir)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
40
|
+
(0, session_state_1.clearActiveActivity)(sessionDir);
|
|
41
|
+
const now = Date.now();
|
|
42
|
+
const duration = (0, actions_1.findDurationSinceLastAction)(actionsFile, "activity_start", now);
|
|
43
|
+
const entry = {
|
|
44
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
45
|
+
type: "activity_end",
|
|
46
|
+
timestamp: now,
|
|
47
|
+
activity_id: activityId,
|
|
48
|
+
duration,
|
|
49
|
+
};
|
|
50
|
+
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
51
|
+
logger_1.logger.debug(`activity-end: ${activityId ?? ""} duration=${duration ?? "unknown"}`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/hooks/core/activity.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAkBH,sCAmBC;AAED,kCAsBC;AA3DD,mCAAoC;AACpC,6CAA0C;AAC1C,mDAAwG;AACxG,uCAA0H;AAanH,KAAK,UAAU,aAAa,CAAC,KAAyB;IACzD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElD,IAAI,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACvB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAW,IAAA,mBAAU,GAAE,CAAC;IACxC,IAAA,iCAAiB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAwB;QAC/B,GAAG,IAAA,oBAAU,EAAC,WAAW,CAAC;QAC1B,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,WAAW,EAAE,UAAU;QACvB,MAAM;KACT,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,WAAW,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;AAChF,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAuB;IACrD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE1C,IAAI,CAAC,IAAA,wBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAuB,IAAA,mCAAmB,EAAC,UAAU,CAAC,CAAC;IACvE,IAAA,mCAAmB,EAAC,UAAU,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAuB,IAAA,qCAA2B,EAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAErG,MAAM,KAAK,GAAsB;QAC7B,GAAG,IAAA,oBAAU,EAAC,WAAW,CAAC;QAC1B,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,UAAW;QACxB,QAAQ;KACX,CAAC;IACF,MAAM,IAAA,sBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvC,eAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,IAAI,EAAE,aAAa,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* All session state (retries, activeVerificationId, lastVerdictStatus)
|
|
6
6
|
* is stored in a single state.json file per session.
|
|
7
7
|
*/
|
|
8
|
+
import { ActionEntry } from "./actions";
|
|
8
9
|
export type SessionPhase = "coding" | "verifying" | "fixing" | null;
|
|
9
10
|
export interface SessionState {
|
|
10
11
|
retries: number;
|
|
@@ -12,9 +13,11 @@ export interface SessionState {
|
|
|
12
13
|
activeTraceId: string | null;
|
|
13
14
|
lastVerdictStatus: string | null;
|
|
14
15
|
activeFixId: string | null;
|
|
16
|
+
activeActivityId: string | null;
|
|
15
17
|
phase: SessionPhase;
|
|
16
18
|
recordingRequired: boolean;
|
|
17
19
|
recordingActive: boolean;
|
|
20
|
+
active: boolean;
|
|
18
21
|
}
|
|
19
22
|
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
20
23
|
export declare function generateTraceId(): string;
|
|
@@ -38,16 +41,15 @@ export declare function isRecordingRequired(sessionDir: string): boolean;
|
|
|
38
41
|
export declare function setRecordingRequired(sessionDir: string, required: boolean): void;
|
|
39
42
|
export declare function isRecordingActive(sessionDir: string): boolean;
|
|
40
43
|
export declare function setRecordingActive(sessionDir: string, active: boolean): void;
|
|
44
|
+
export declare function isActive(sessionDir: string): boolean;
|
|
45
|
+
export declare function setActive(sessionDir: string, active: boolean): void;
|
|
46
|
+
export declare function getActiveActivityId(sessionDir: string): string | undefined;
|
|
47
|
+
export declare function setActiveActivity(sessionDir: string, activityId: string): void;
|
|
48
|
+
export declare function clearActiveActivity(sessionDir: string): void;
|
|
41
49
|
/**
|
|
42
50
|
* Reconcile session state on session start/resume.
|
|
43
51
|
* Closes any open verification or fix cycles, records appropriate
|
|
44
52
|
* end entries in actions.jsonl, and resets phase to "coding".
|
|
45
|
-
*
|
|
46
|
-
* @param appendFn — action appender function (avoids circular import with actions.ts)
|
|
47
53
|
*/
|
|
48
|
-
export declare function reconcileSessionState(sessionDir: string, actionsFile: string, appendFn: (file: string, entry:
|
|
49
|
-
type: string;
|
|
50
|
-
timestamp: string;
|
|
51
|
-
[key: string]: unknown;
|
|
52
|
-
}) => Promise<void>): Promise<void>;
|
|
54
|
+
export declare function reconcileSessionState(sessionDir: string, actionsFile: string, appendFn: (file: string, entry: ActionEntry) => Promise<void>): Promise<void>;
|
|
53
55
|
//# sourceMappingURL=session-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,11 +28,17 @@ exports.isRecordingRequired = isRecordingRequired;
|
|
|
28
28
|
exports.setRecordingRequired = setRecordingRequired;
|
|
29
29
|
exports.isRecordingActive = isRecordingActive;
|
|
30
30
|
exports.setRecordingActive = setRecordingActive;
|
|
31
|
+
exports.isActive = isActive;
|
|
32
|
+
exports.setActive = setActive;
|
|
33
|
+
exports.getActiveActivityId = getActiveActivityId;
|
|
34
|
+
exports.setActiveActivity = setActiveActivity;
|
|
35
|
+
exports.clearActiveActivity = clearActiveActivity;
|
|
31
36
|
exports.reconcileSessionState = reconcileSessionState;
|
|
32
37
|
const crypto_1 = require("crypto");
|
|
33
38
|
const fs_1 = require("fs");
|
|
34
39
|
const path_1 = require("path");
|
|
35
40
|
const logger_1 = require("../../lib/logger");
|
|
41
|
+
const actions_1 = require("./actions");
|
|
36
42
|
const STATE_FILE = "state.json";
|
|
37
43
|
const DEFAULT_STATE = {
|
|
38
44
|
retries: 0,
|
|
@@ -40,9 +46,11 @@ const DEFAULT_STATE = {
|
|
|
40
46
|
activeTraceId: null,
|
|
41
47
|
lastVerdictStatus: null,
|
|
42
48
|
activeFixId: null,
|
|
49
|
+
activeActivityId: null,
|
|
43
50
|
phase: null,
|
|
44
51
|
recordingRequired: false,
|
|
45
52
|
recordingActive: false,
|
|
53
|
+
active: false,
|
|
46
54
|
};
|
|
47
55
|
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
48
56
|
function generateTraceId() {
|
|
@@ -63,9 +71,11 @@ function readState(sessionDir) {
|
|
|
63
71
|
activeTraceId: typeof parsed.activeTraceId === "string" ? parsed.activeTraceId : null,
|
|
64
72
|
lastVerdictStatus: typeof parsed.lastVerdictStatus === "string" ? parsed.lastVerdictStatus : null,
|
|
65
73
|
activeFixId: typeof parsed.activeFixId === "string" ? parsed.activeFixId : null,
|
|
74
|
+
activeActivityId: typeof parsed.activeActivityId === "string" ? parsed.activeActivityId : null,
|
|
66
75
|
phase: typeof parsed.phase === "string" && validPhases.includes(parsed.phase) ? parsed.phase : null,
|
|
67
76
|
recordingRequired: typeof parsed.recordingRequired === "boolean" ? parsed.recordingRequired : false,
|
|
68
77
|
recordingActive: typeof parsed.recordingActive === "boolean" ? parsed.recordingActive : false,
|
|
78
|
+
active: typeof parsed.active === "boolean" ? parsed.active : false,
|
|
69
79
|
};
|
|
70
80
|
}
|
|
71
81
|
catch (e) {
|
|
@@ -170,25 +180,54 @@ function setRecordingActive(sessionDir, active) {
|
|
|
170
180
|
state.recordingActive = active;
|
|
171
181
|
writeState(sessionDir, state);
|
|
172
182
|
}
|
|
183
|
+
function isActive(sessionDir) {
|
|
184
|
+
const state = readState(sessionDir);
|
|
185
|
+
return state.active;
|
|
186
|
+
}
|
|
187
|
+
function setActive(sessionDir, active) {
|
|
188
|
+
const state = readState(sessionDir);
|
|
189
|
+
state.active = active;
|
|
190
|
+
if (!active) {
|
|
191
|
+
state.activeActivityId = null;
|
|
192
|
+
}
|
|
193
|
+
writeState(sessionDir, state);
|
|
194
|
+
}
|
|
195
|
+
function getActiveActivityId(sessionDir) {
|
|
196
|
+
const state = readState(sessionDir);
|
|
197
|
+
return state.activeActivityId ?? undefined;
|
|
198
|
+
}
|
|
199
|
+
function setActiveActivity(sessionDir, activityId) {
|
|
200
|
+
const state = readState(sessionDir);
|
|
201
|
+
state.activeActivityId = activityId;
|
|
202
|
+
state.active = true;
|
|
203
|
+
writeState(sessionDir, state);
|
|
204
|
+
}
|
|
205
|
+
function clearActiveActivity(sessionDir) {
|
|
206
|
+
const state = readState(sessionDir);
|
|
207
|
+
state.activeActivityId = null;
|
|
208
|
+
state.active = false;
|
|
209
|
+
writeState(sessionDir, state);
|
|
210
|
+
}
|
|
173
211
|
/**
|
|
174
212
|
* Reconcile session state on session start/resume.
|
|
175
213
|
* Closes any open verification or fix cycles, records appropriate
|
|
176
214
|
* end entries in actions.jsonl, and resets phase to "coding".
|
|
177
|
-
*
|
|
178
|
-
* @param appendFn — action appender function (avoids circular import with actions.ts)
|
|
179
215
|
*/
|
|
180
216
|
async function reconcileSessionState(sessionDir, actionsFile, appendFn) {
|
|
181
217
|
const state = readState(sessionDir);
|
|
182
218
|
let dirty = false;
|
|
183
219
|
// close abandoned verification
|
|
184
220
|
if (state.activeVerificationId) {
|
|
185
|
-
|
|
221
|
+
const entry = {
|
|
222
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
186
223
|
type: "verification_end",
|
|
187
|
-
timestamp:
|
|
224
|
+
timestamp: Date.now(),
|
|
188
225
|
verification_id: state.activeVerificationId,
|
|
226
|
+
activity_id: state.activeActivityId,
|
|
189
227
|
trace_id: state.activeTraceId,
|
|
190
228
|
reason: "session_reconcile",
|
|
191
|
-
}
|
|
229
|
+
};
|
|
230
|
+
await appendFn(actionsFile, entry);
|
|
192
231
|
logger_1.logger.debug(`reconcile: ended abandoned verification ${state.activeVerificationId}`);
|
|
193
232
|
state.activeVerificationId = null;
|
|
194
233
|
state.activeTraceId = null;
|
|
@@ -196,16 +235,34 @@ async function reconcileSessionState(sessionDir, actionsFile, appendFn) {
|
|
|
196
235
|
}
|
|
197
236
|
// close abandoned fix
|
|
198
237
|
if (state.activeFixId) {
|
|
199
|
-
|
|
238
|
+
const entry = {
|
|
239
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
200
240
|
type: "fix_end",
|
|
201
|
-
timestamp:
|
|
241
|
+
timestamp: Date.now(),
|
|
202
242
|
fix_id: state.activeFixId,
|
|
243
|
+
activity_id: state.activeActivityId,
|
|
203
244
|
reason: "session_reconcile",
|
|
204
|
-
}
|
|
245
|
+
};
|
|
246
|
+
await appendFn(actionsFile, entry);
|
|
205
247
|
logger_1.logger.debug(`reconcile: ended abandoned fix ${state.activeFixId}`);
|
|
206
248
|
state.activeFixId = null;
|
|
207
249
|
dirty = true;
|
|
208
250
|
}
|
|
251
|
+
// close abandoned activity
|
|
252
|
+
if (state.active) {
|
|
253
|
+
const entry = {
|
|
254
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
255
|
+
type: "activity_end",
|
|
256
|
+
timestamp: Date.now(),
|
|
257
|
+
activity_id: state.activeActivityId,
|
|
258
|
+
reason: "session_reconcile",
|
|
259
|
+
};
|
|
260
|
+
await appendFn(actionsFile, entry);
|
|
261
|
+
logger_1.logger.debug(`reconcile: ended abandoned activity ${state.activeActivityId ?? ""}`);
|
|
262
|
+
state.active = false;
|
|
263
|
+
state.activeActivityId = null;
|
|
264
|
+
dirty = true;
|
|
265
|
+
}
|
|
209
266
|
// reset recording state
|
|
210
267
|
if (state.recordingRequired || state.recordingActive) {
|
|
211
268
|
state.recordingRequired = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"submit-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;AAcD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqI9F"}
|
|
@@ -81,24 +81,34 @@ async function runSubmitVerdict(input) {
|
|
|
81
81
|
// auto-record verification_end if there's an active verification
|
|
82
82
|
const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
|
|
83
83
|
const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
84
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
84
85
|
if (verificationId) {
|
|
86
|
+
const verEndNow = Date.now();
|
|
85
87
|
const endEntry = {
|
|
88
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
86
89
|
type: "verification_end",
|
|
87
|
-
timestamp:
|
|
90
|
+
timestamp: verEndNow,
|
|
88
91
|
verification_id: verificationId,
|
|
92
|
+
activity_id: activityId,
|
|
89
93
|
trace_id: traceId,
|
|
94
|
+
duration: (0, actions_1.findDurationSinceLastAction)(actionsFile, "verification_start", verEndNow),
|
|
95
|
+
status: verdict.status,
|
|
90
96
|
};
|
|
91
97
|
await (0, actions_1.appendAction)(actionsFile, endEntry);
|
|
92
98
|
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
93
99
|
logger_1.logger.debug(`verification-end (auto): ${verificationId} trace=${traceId}`);
|
|
94
100
|
}
|
|
95
101
|
// record verdict_write action
|
|
102
|
+
// Post-validation the verdict satisfies the strict Verdict contract.
|
|
103
|
+
const typedVerdict = verdict;
|
|
96
104
|
const entry = {
|
|
105
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
97
106
|
type: "verdict_write",
|
|
98
|
-
timestamp:
|
|
107
|
+
timestamp: Date.now(),
|
|
99
108
|
verification_id: verificationId,
|
|
109
|
+
activity_id: activityId,
|
|
100
110
|
trace_id: traceId,
|
|
101
|
-
verdict:
|
|
111
|
+
verdict: typedVerdict,
|
|
102
112
|
};
|
|
103
113
|
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
104
114
|
await (0, telemetry_1.trackVerdictWrite)(sessionId, verdict.status);
|
|
@@ -106,9 +116,11 @@ async function runSubmitVerdict(input) {
|
|
|
106
116
|
if (verdict.status === "fail") {
|
|
107
117
|
const fixId = (0, crypto_1.randomUUID)();
|
|
108
118
|
const fixEntry = {
|
|
119
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
109
120
|
type: "fix_start",
|
|
110
|
-
timestamp:
|
|
121
|
+
timestamp: Date.now(),
|
|
111
122
|
fix_id: fixId,
|
|
123
|
+
activity_id: activityId,
|
|
112
124
|
};
|
|
113
125
|
await (0, actions_1.appendAction)(actionsFile, fixEntry);
|
|
114
126
|
(0, session_state_1.setActiveFix)(sessionDir, fixId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"submit-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/submit-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"verification-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAgEvG;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2BjG"}
|
|
@@ -15,13 +15,18 @@ const actions_1 = require("./actions");
|
|
|
15
15
|
const session_state_1 = require("./session-state");
|
|
16
16
|
async function startVerification(input) {
|
|
17
17
|
const { sessionDir, actionsFile } = input;
|
|
18
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
18
19
|
// if there's an active fix, end it before starting verification
|
|
19
20
|
const activeFixId = (0, session_state_1.getActiveFixId)(sessionDir);
|
|
20
21
|
if (activeFixId) {
|
|
22
|
+
const fixEndNow = Date.now();
|
|
21
23
|
const fixEndEntry = {
|
|
24
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
22
25
|
type: "fix_end",
|
|
23
|
-
timestamp:
|
|
26
|
+
timestamp: fixEndNow,
|
|
24
27
|
fix_id: activeFixId,
|
|
28
|
+
activity_id: activityId,
|
|
29
|
+
duration: (0, actions_1.findDurationSinceLastAction)(actionsFile, "fix_start", fixEndNow),
|
|
25
30
|
};
|
|
26
31
|
await (0, actions_1.appendAction)(actionsFile, fixEndEntry);
|
|
27
32
|
(0, session_state_1.clearActiveFix)(sessionDir);
|
|
@@ -32,11 +37,15 @@ async function startVerification(input) {
|
|
|
32
37
|
if (existingId) {
|
|
33
38
|
const existingTraceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
34
39
|
logger_1.logger.debug(`ending previous verification ${existingId} before starting new one`);
|
|
40
|
+
const verEndNow = Date.now();
|
|
35
41
|
const endEntry = {
|
|
42
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
36
43
|
type: "verification_end",
|
|
37
|
-
timestamp:
|
|
44
|
+
timestamp: verEndNow,
|
|
38
45
|
verification_id: existingId,
|
|
46
|
+
activity_id: activityId,
|
|
39
47
|
trace_id: existingTraceId,
|
|
48
|
+
duration: (0, actions_1.findDurationSinceLastAction)(actionsFile, "verification_start", verEndNow),
|
|
40
49
|
};
|
|
41
50
|
await (0, actions_1.appendAction)(actionsFile, endEntry);
|
|
42
51
|
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
@@ -44,9 +53,11 @@ async function startVerification(input) {
|
|
|
44
53
|
const verificationId = (0, crypto_1.randomUUID)();
|
|
45
54
|
const traceId = (0, session_state_1.generateTraceId)();
|
|
46
55
|
const entry = {
|
|
56
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
47
57
|
type: "verification_start",
|
|
48
|
-
timestamp:
|
|
58
|
+
timestamp: Date.now(),
|
|
49
59
|
verification_id: verificationId,
|
|
60
|
+
activity_id: activityId,
|
|
50
61
|
trace_id: traceId,
|
|
51
62
|
};
|
|
52
63
|
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
@@ -66,11 +77,16 @@ async function endVerification(input) {
|
|
|
66
77
|
return { success: false, message: "No active verification to end." };
|
|
67
78
|
}
|
|
68
79
|
const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
80
|
+
const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
|
|
81
|
+
const now = Date.now();
|
|
69
82
|
const entry = {
|
|
83
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
70
84
|
type: "verification_end",
|
|
71
|
-
timestamp:
|
|
85
|
+
timestamp: now,
|
|
72
86
|
verification_id: verificationId,
|
|
87
|
+
activity_id: activityId,
|
|
73
88
|
trace_id: traceId,
|
|
89
|
+
duration: (0, actions_1.findDurationSinceLastAction)(actionsFile, "verification_start", now),
|
|
74
90
|
};
|
|
75
91
|
await (0, actions_1.appendAction)(actionsFile, entry);
|
|
76
92
|
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-lifecycle.js","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"verification-lifecycle.js","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAgED,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwLrF"}
|
|
@@ -63,7 +63,7 @@ async function runVerifyGate(input) {
|
|
|
63
63
|
const hasEdit = (0, actions_1.hasFileEditsSinceLastVerification)(actionsFile);
|
|
64
64
|
if (!hasEdit) {
|
|
65
65
|
logger_1.logger.debug("no code edits detected, allowing completion");
|
|
66
|
-
await recordMarker(actionsFile, sid, "allow", "no_edits");
|
|
66
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "no_edits");
|
|
67
67
|
return { action: "allow" };
|
|
68
68
|
}
|
|
69
69
|
// ── Check 2: Were required IronBee tools used AFTER the latest code edit? ─
|
|
@@ -73,8 +73,10 @@ async function runVerifyGate(input) {
|
|
|
73
73
|
logger_1.logger.debug(`verify-gate: missingTools=${missingTools.length}/${REQUIRED_TOOLS.length} usedTools=${[...usedToolNames].join(",")}`);
|
|
74
74
|
if (missingTools.length === REQUIRED_TOOLS.length) {
|
|
75
75
|
const marker = {
|
|
76
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
76
77
|
type: "verification_requested",
|
|
77
|
-
timestamp:
|
|
78
|
+
timestamp: Date.now(),
|
|
79
|
+
activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
|
|
78
80
|
action: "block",
|
|
79
81
|
reason: "no_tools",
|
|
80
82
|
};
|
|
@@ -100,7 +102,7 @@ You made code changes but did not verify them through the browser.
|
|
|
100
102
|
}
|
|
101
103
|
if (missingTools.length > 0) {
|
|
102
104
|
const missing = missingTools.map((t) => ` - ${t.name} (${t.purpose})`).join("\n");
|
|
103
|
-
await recordMarker(actionsFile, sid, "block", "incomplete_tools");
|
|
105
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "incomplete_tools");
|
|
104
106
|
return {
|
|
105
107
|
action: "block",
|
|
106
108
|
message: `INCOMPLETE VERIFICATION.
|
|
@@ -114,7 +116,7 @@ Run the missing tools, functionally test your changes, then submit your verdict:
|
|
|
114
116
|
}
|
|
115
117
|
// ── Check 3: Verdict file exists? ──────────────────────
|
|
116
118
|
if (!(0, fs_1.existsSync)(verdictFile)) {
|
|
117
|
-
await recordMarker(actionsFile, sid, "block", "no_verdict");
|
|
119
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "no_verdict");
|
|
118
120
|
return {
|
|
119
121
|
action: "block",
|
|
120
122
|
message: `VERDICT MISSING.
|
|
@@ -132,7 +134,7 @@ Submit your verdict:
|
|
|
132
134
|
catch (e) {
|
|
133
135
|
logger_1.logger.debug(`failed to parse verdict ${verdictFile}: ${e}`);
|
|
134
136
|
cleanup(verdictFile);
|
|
135
|
-
await recordMarker(actionsFile, sid, "block", "invalid_verdict");
|
|
137
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
136
138
|
return {
|
|
137
139
|
action: "block",
|
|
138
140
|
message: `INVALID VERDICT. Submit valid JSON:
|
|
@@ -144,7 +146,7 @@ Submit your verdict:
|
|
|
144
146
|
const checks = verdict.checks;
|
|
145
147
|
if (!Array.isArray(pages) || pages.length === 0) {
|
|
146
148
|
cleanup(verdictFile);
|
|
147
|
-
await recordMarker(actionsFile, sid, "block", "invalid_verdict");
|
|
149
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
148
150
|
return {
|
|
149
151
|
action: "block",
|
|
150
152
|
message: `VERDICT REJECTED: missing pages_tested.
|
|
@@ -155,7 +157,7 @@ Your verdict must include which pages you tested.
|
|
|
155
157
|
}
|
|
156
158
|
if (!Array.isArray(checks) || checks.length === 0) {
|
|
157
159
|
cleanup(verdictFile);
|
|
158
|
-
await recordMarker(actionsFile, sid, "block", "invalid_verdict");
|
|
160
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
159
161
|
return {
|
|
160
162
|
action: "block",
|
|
161
163
|
message: `VERDICT REJECTED: missing checks.
|
|
@@ -166,7 +168,7 @@ Your verdict must describe what you functionally tested.
|
|
|
166
168
|
}
|
|
167
169
|
if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
|
|
168
170
|
cleanup(verdictFile);
|
|
169
|
-
await recordMarker(actionsFile, sid, "block", "invalid_verdict");
|
|
171
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
170
172
|
return {
|
|
171
173
|
action: "block",
|
|
172
174
|
message: `VERDICT REJECTED: missing console_errors or network_failures count.
|
|
@@ -179,7 +181,7 @@ Your verdict must include error counts.
|
|
|
179
181
|
if (verdict.status === "pass") {
|
|
180
182
|
logger_1.logger.debug("verdict passed, allowing completion");
|
|
181
183
|
(0, session_state_1.resetRetries)(sessionDir);
|
|
182
|
-
await recordMarker(actionsFile, sid, "allow", "verdict_pass");
|
|
184
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "verdict_pass");
|
|
183
185
|
return { action: "allow" };
|
|
184
186
|
}
|
|
185
187
|
if (verdict.status === "fail") {
|
|
@@ -188,7 +190,7 @@ Your verdict must include error counts.
|
|
|
188
190
|
if (retries >= maxRetries) {
|
|
189
191
|
cleanup(verdictFile);
|
|
190
192
|
(0, session_state_1.resetRetries)(sessionDir);
|
|
191
|
-
await recordMarker(actionsFile, sid, "allow", "max_retries_exceeded");
|
|
193
|
+
await recordMarker(actionsFile, sessionDir, sid, "allow", "max_retries_exceeded");
|
|
192
194
|
return {
|
|
193
195
|
action: "allow",
|
|
194
196
|
message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
|
|
@@ -200,7 +202,7 @@ Report these issues in your final response.`,
|
|
|
200
202
|
};
|
|
201
203
|
}
|
|
202
204
|
cleanup(verdictFile);
|
|
203
|
-
await recordMarker(actionsFile, sid, "block", "verdict_fail");
|
|
205
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "verdict_fail");
|
|
204
206
|
return {
|
|
205
207
|
action: "block",
|
|
206
208
|
message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
|
|
@@ -214,17 +216,19 @@ Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
|
|
|
214
216
|
}
|
|
215
217
|
// ── Unknown status ─────────────────────────────────────
|
|
216
218
|
cleanup(verdictFile);
|
|
217
|
-
await recordMarker(actionsFile, sid, "block", "invalid_verdict");
|
|
219
|
+
await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
|
|
218
220
|
return {
|
|
219
221
|
action: "block",
|
|
220
222
|
message: `INVALID VERDICT STATUS: "${verdict.status}". Status must be "pass" or "fail".
|
|
221
223
|
echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
|
|
222
224
|
};
|
|
223
225
|
}
|
|
224
|
-
async function recordMarker(actionsFile, sessionId, action, reason) {
|
|
226
|
+
async function recordMarker(actionsFile, sessionDir, sessionId, action, reason) {
|
|
225
227
|
const marker = {
|
|
228
|
+
...(0, actions_1.baseFields)(actionsFile),
|
|
226
229
|
type: "verification_requested",
|
|
227
|
-
timestamp:
|
|
230
|
+
timestamp: Date.now(),
|
|
231
|
+
activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
|
|
228
232
|
action,
|
|
229
233
|
reason,
|
|
230
234
|
};
|