@ironbee-ai/cli 0.3.0 → 0.4.1
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 +19 -8
- package/README.md +163 -3
- package/dist/analysis/code-changes.d.ts +22 -0
- package/dist/analysis/code-changes.d.ts.map +1 -0
- package/dist/analysis/code-changes.js +141 -0
- package/dist/analysis/code-changes.js.map +1 -0
- package/dist/analysis/cross-session.d.ts +34 -0
- package/dist/analysis/cross-session.d.ts.map +1 -0
- package/dist/analysis/cross-session.js +230 -0
- package/dist/analysis/cross-session.js.map +1 -0
- package/dist/analysis/fix-effectiveness.d.ts +16 -0
- package/dist/analysis/fix-effectiveness.d.ts.map +1 -0
- package/dist/analysis/fix-effectiveness.js +99 -0
- package/dist/analysis/fix-effectiveness.js.map +1 -0
- package/dist/analysis/scoring.d.ts +15 -0
- package/dist/analysis/scoring.d.ts.map +1 -0
- package/dist/analysis/scoring.js +57 -0
- package/dist/analysis/scoring.js.map +1 -0
- package/dist/analysis/time-analysis.d.ts +22 -0
- package/dist/analysis/time-analysis.d.ts.map +1 -0
- package/dist/analysis/time-analysis.js +174 -0
- package/dist/analysis/time-analysis.js.map +1 -0
- package/dist/analysis/verdict-details.d.ts +23 -0
- package/dist/analysis/verdict-details.d.ts.map +1 -0
- package/dist/analysis/verdict-details.js +59 -0
- package/dist/analysis/verdict-details.js.map +1 -0
- package/dist/analysis/verification-quality.d.ts +19 -0
- package/dist/analysis/verification-quality.d.ts.map +1 -0
- package/dist/analysis/verification-quality.js +182 -0
- package/dist/analysis/verification-quality.js.map +1 -0
- package/dist/clients/base.d.ts +2 -0
- package/dist/clients/base.d.ts.map +1 -1
- package/dist/clients/claude/commands/ironbee-analyze.md +42 -0
- package/dist/clients/claude/commands/ironbee-verify.md +127 -0
- package/dist/clients/claude/hooks/clear-verdict.js +1 -1
- package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/claude/hooks/require-verification.d.ts +15 -0
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -0
- package/dist/clients/claude/hooks/require-verification.js +63 -0
- package/dist/clients/claude/hooks/require-verification.js.map +1 -0
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +7 -0
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +58 -13
- package/dist/clients/claude/hooks/track-action.js.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.js +1 -1
- 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 +51 -19
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/rule.md +10 -7
- package/dist/clients/claude/skill.md +13 -8
- package/dist/clients/claude/skills/ironbee-analyze.md +39 -0
- package/dist/clients/cursor/commands/ironbee-analyze/SKILL.md +48 -0
- package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +133 -0
- package/dist/clients/cursor/hooks/clear-verdict.js +1 -1
- package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.d.ts +15 -0
- package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -0
- package/dist/clients/cursor/hooks/require-verification.js +65 -0
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -0
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +3 -0
- 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 +62 -12
- package/dist/clients/cursor/hooks/track-action.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +1 -1
- 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 +41 -16
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/cursor/rule.md +10 -7
- package/dist/clients/cursor/skill.md +13 -8
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +298 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +79 -0
- package/dist/commands/hook.js.map +1 -1
- package/dist/hooks/core/actions.d.ts +19 -0
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +5 -0
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/clear-verdict.d.ts +1 -1
- package/dist/hooks/core/clear-verdict.d.ts.map +1 -1
- package/dist/hooks/core/clear-verdict.js +13 -9
- package/dist/hooks/core/clear-verdict.js.map +1 -1
- package/dist/hooks/core/session-state.d.ts +47 -0
- package/dist/hooks/core/session-state.d.ts.map +1 -0
- package/dist/hooks/core/session-state.js +192 -0
- package/dist/hooks/core/session-state.js.map +1 -0
- package/dist/hooks/core/submit-verdict.d.ts +1 -0
- package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
- package/dist/hooks/core/submit-verdict.js +35 -27
- package/dist/hooks/core/submit-verdict.js.map +1 -1
- package/dist/hooks/core/verification-lifecycle.d.ts +30 -0
- package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -0
- package/dist/hooks/core/verification-lifecycle.js +75 -0
- package/dist/hooks/core/verification-lifecycle.js.map +1 -0
- package/dist/hooks/core/verify-gate.d.ts +1 -1
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +13 -20
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +59 -0
- package/dist/lib/config.js.map +1 -1
- package/package.json +4 -3
|
@@ -34,9 +34,28 @@ export interface SessionStartAction extends ActionEntry {
|
|
|
34
34
|
session_id: string;
|
|
35
35
|
source?: string;
|
|
36
36
|
}
|
|
37
|
+
export interface VerificationStartAction extends ActionEntry {
|
|
38
|
+
type: "verification_start";
|
|
39
|
+
verification_id: string;
|
|
40
|
+
trace_id?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface VerificationEndAction extends ActionEntry {
|
|
43
|
+
type: "verification_end";
|
|
44
|
+
verification_id: string;
|
|
45
|
+
trace_id?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface FixStartAction extends ActionEntry {
|
|
48
|
+
type: "fix_start";
|
|
49
|
+
fix_id: string;
|
|
50
|
+
}
|
|
51
|
+
export interface FixEndAction extends ActionEntry {
|
|
52
|
+
type: "fix_end";
|
|
53
|
+
fix_id: string;
|
|
54
|
+
}
|
|
37
55
|
export declare function appendAction(actionsFile: string, entry: ActionEntry): void;
|
|
38
56
|
export declare function readActionsSinceLastMarker(actionsFile: string, markerType: string): ActionEntry[];
|
|
39
57
|
export declare function getToolCallsSinceLastVerification(actionsFile: string): ToolCallAction[];
|
|
58
|
+
export declare function getToolCallsSinceLastFileEdit(actionsFile: string): ToolCallAction[];
|
|
40
59
|
export declare function hasToolCallsSinceLastVerdict(actionsFile: string): boolean;
|
|
41
60
|
export declare function hasFileEditsSinceLastVerification(actionsFile: string): boolean;
|
|
42
61
|
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC5D,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAO1E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CA6BjG;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CAGvF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGzE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG9E"}
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC5D,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACnD,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAwB,SAAQ,WAAW;IACxD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAO1E;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CA6BjG;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CAGvF;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CAGnF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGzE;AAED,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG9E"}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.appendAction = appendAction;
|
|
10
10
|
exports.readActionsSinceLastMarker = readActionsSinceLastMarker;
|
|
11
11
|
exports.getToolCallsSinceLastVerification = getToolCallsSinceLastVerification;
|
|
12
|
+
exports.getToolCallsSinceLastFileEdit = getToolCallsSinceLastFileEdit;
|
|
12
13
|
exports.hasToolCallsSinceLastVerdict = hasToolCallsSinceLastVerdict;
|
|
13
14
|
exports.hasFileEditsSinceLastVerification = hasFileEditsSinceLastVerification;
|
|
14
15
|
const fs_1 = require("fs");
|
|
@@ -55,6 +56,10 @@ function getToolCallsSinceLastVerification(actionsFile) {
|
|
|
55
56
|
const entries = readActionsSinceLastMarker(actionsFile, "verification_requested");
|
|
56
57
|
return entries.filter((e) => e.type === "tool_call");
|
|
57
58
|
}
|
|
59
|
+
function getToolCallsSinceLastFileEdit(actionsFile) {
|
|
60
|
+
const entries = readActionsSinceLastMarker(actionsFile, "file_edit");
|
|
61
|
+
return entries.filter((e) => e.type === "tool_call");
|
|
62
|
+
}
|
|
58
63
|
function hasToolCallsSinceLastVerdict(actionsFile) {
|
|
59
64
|
const entries = readActionsSinceLastMarker(actionsFile, "verdict_write");
|
|
60
65
|
return entries.some((e) => e.type === "tool_call");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"clear-verdict.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAgB9D"}
|
|
@@ -9,17 +9,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.runClearVerdict = runClearVerdict;
|
|
10
10
|
const fs_1 = require("fs");
|
|
11
11
|
const logger_1 = require("../../lib/logger");
|
|
12
|
+
const session_state_1 = require("./session-state");
|
|
12
13
|
function runClearVerdict(input) {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
logger_1.logger.debug(`failed to cleanup ${f}: ${e}`);
|
|
14
|
+
const { verdictFile, sessionDir } = input;
|
|
15
|
+
// delete verdict file
|
|
16
|
+
try {
|
|
17
|
+
if ((0, fs_1.existsSync)(verdictFile)) {
|
|
18
|
+
(0, fs_1.unlinkSync)(verdictFile);
|
|
22
19
|
}
|
|
23
20
|
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
logger_1.logger.debug(`failed to cleanup ${verdictFile}: ${e}`);
|
|
23
|
+
}
|
|
24
|
+
// reset retries (new verification cycle after code edit)
|
|
25
|
+
// NOTE: lastVerdictStatus is NOT reset — it persists so that
|
|
26
|
+
// submit-verdict can enforce "fixes" field on pass-after-fail
|
|
27
|
+
(0, session_state_1.resetRetries)(sessionDir);
|
|
24
28
|
}
|
|
25
29
|
//# sourceMappingURL=clear-verdict.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"clear-verdict.js","sourceRoot":"","sources":["../../../src/hooks/core/clear-verdict.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAWH,0CAgBC;AAzBD,2BAA4C;AAC5C,6CAA0C;AAC1C,mDAA+C;AAO/C,SAAgB,eAAe,CAAC,KAAwB;IACpD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE1C,sBAAsB;IACtB,IAAI,CAAC;QACD,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC1B,IAAA,eAAU,EAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,yDAAyD;IACzD,6DAA6D;IAC7D,8DAA8D;IAC9D,IAAA,4BAAY,EAAC,UAAU,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Session State Management
|
|
3
|
+
*
|
|
4
|
+
* Centralized state management for session data.
|
|
5
|
+
* All session state (retries, activeVerificationId, lastVerdictStatus)
|
|
6
|
+
* is stored in a single state.json file per session.
|
|
7
|
+
*/
|
|
8
|
+
export type SessionPhase = "coding" | "verifying" | "fixing" | null;
|
|
9
|
+
export interface SessionState {
|
|
10
|
+
retries: number;
|
|
11
|
+
activeVerificationId: string | null;
|
|
12
|
+
activeTraceId: string | null;
|
|
13
|
+
lastVerdictStatus: string | null;
|
|
14
|
+
activeFixId: string | null;
|
|
15
|
+
phase: SessionPhase;
|
|
16
|
+
}
|
|
17
|
+
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
18
|
+
export declare function generateTraceId(): string;
|
|
19
|
+
export declare function readState(sessionDir: string): SessionState;
|
|
20
|
+
export declare function writeState(sessionDir: string, state: SessionState): void;
|
|
21
|
+
export declare function getActiveVerificationId(sessionDir: string): string | undefined;
|
|
22
|
+
export declare function setActiveVerification(sessionDir: string, verificationId: string, traceId: string): void;
|
|
23
|
+
export declare function getActiveTraceId(sessionDir: string): string | undefined;
|
|
24
|
+
export declare function clearActiveVerification(sessionDir: string): void;
|
|
25
|
+
export declare function getRetries(sessionDir: string): number;
|
|
26
|
+
export declare function incrementRetries(sessionDir: string): number;
|
|
27
|
+
export declare function resetRetries(sessionDir: string): void;
|
|
28
|
+
export declare function getLastVerdictStatus(sessionDir: string): string | undefined;
|
|
29
|
+
export declare function setLastVerdictStatus(sessionDir: string, status: string | null): void;
|
|
30
|
+
export declare function setActiveFix(sessionDir: string, fixId: string): void;
|
|
31
|
+
export declare function getActiveFixId(sessionDir: string): string | undefined;
|
|
32
|
+
export declare function clearActiveFix(sessionDir: string): void;
|
|
33
|
+
export declare function setPhase(sessionDir: string, phase: SessionPhase): void;
|
|
34
|
+
export declare function getPhase(sessionDir: string): SessionPhase;
|
|
35
|
+
/**
|
|
36
|
+
* Reconcile session state on session start/resume.
|
|
37
|
+
* Closes any open verification or fix cycles, records appropriate
|
|
38
|
+
* end entries in actions.jsonl, and resets phase to "coding".
|
|
39
|
+
*
|
|
40
|
+
* @param appendFn — action appender function (avoids circular import with actions.ts)
|
|
41
|
+
*/
|
|
42
|
+
export declare function reconcileSessionState(sessionDir: string, actionsFile: string, appendFn: (file: string, entry: {
|
|
43
|
+
type: string;
|
|
44
|
+
timestamp: string;
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
}) => void): void;
|
|
47
|
+
//# sourceMappingURL=session-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpE,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;CACvB;AAaD,sEAAsE;AACtE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAqB1D;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAQxE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMvG;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3E;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAIpF;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGrE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAItE;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAGzD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KAAK,IAAI,GACrG,IAAI,CAyCN"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Session State Management
|
|
4
|
+
*
|
|
5
|
+
* Centralized state management for session data.
|
|
6
|
+
* All session state (retries, activeVerificationId, lastVerdictStatus)
|
|
7
|
+
* is stored in a single state.json file per session.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.generateTraceId = generateTraceId;
|
|
11
|
+
exports.readState = readState;
|
|
12
|
+
exports.writeState = writeState;
|
|
13
|
+
exports.getActiveVerificationId = getActiveVerificationId;
|
|
14
|
+
exports.setActiveVerification = setActiveVerification;
|
|
15
|
+
exports.getActiveTraceId = getActiveTraceId;
|
|
16
|
+
exports.clearActiveVerification = clearActiveVerification;
|
|
17
|
+
exports.getRetries = getRetries;
|
|
18
|
+
exports.incrementRetries = incrementRetries;
|
|
19
|
+
exports.resetRetries = resetRetries;
|
|
20
|
+
exports.getLastVerdictStatus = getLastVerdictStatus;
|
|
21
|
+
exports.setLastVerdictStatus = setLastVerdictStatus;
|
|
22
|
+
exports.setActiveFix = setActiveFix;
|
|
23
|
+
exports.getActiveFixId = getActiveFixId;
|
|
24
|
+
exports.clearActiveFix = clearActiveFix;
|
|
25
|
+
exports.setPhase = setPhase;
|
|
26
|
+
exports.getPhase = getPhase;
|
|
27
|
+
exports.reconcileSessionState = reconcileSessionState;
|
|
28
|
+
const crypto_1 = require("crypto");
|
|
29
|
+
const fs_1 = require("fs");
|
|
30
|
+
const path_1 = require("path");
|
|
31
|
+
const logger_1 = require("../../lib/logger");
|
|
32
|
+
const STATE_FILE = "state.json";
|
|
33
|
+
const DEFAULT_STATE = {
|
|
34
|
+
retries: 0,
|
|
35
|
+
activeVerificationId: null,
|
|
36
|
+
activeTraceId: null,
|
|
37
|
+
lastVerdictStatus: null,
|
|
38
|
+
activeFixId: null,
|
|
39
|
+
phase: null,
|
|
40
|
+
};
|
|
41
|
+
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
42
|
+
function generateTraceId() {
|
|
43
|
+
return (0, crypto_1.randomBytes)(16).toString("hex");
|
|
44
|
+
}
|
|
45
|
+
function readState(sessionDir) {
|
|
46
|
+
const filePath = (0, path_1.join)(sessionDir, STATE_FILE);
|
|
47
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
48
|
+
return { ...DEFAULT_STATE };
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = (0, fs_1.readFileSync)(filePath, "utf-8");
|
|
52
|
+
const parsed = JSON.parse(content);
|
|
53
|
+
const validPhases = ["coding", "verifying", "fixing"];
|
|
54
|
+
return {
|
|
55
|
+
retries: typeof parsed.retries === "number" ? parsed.retries : 0,
|
|
56
|
+
activeVerificationId: typeof parsed.activeVerificationId === "string" ? parsed.activeVerificationId : null,
|
|
57
|
+
activeTraceId: typeof parsed.activeTraceId === "string" ? parsed.activeTraceId : null,
|
|
58
|
+
lastVerdictStatus: typeof parsed.lastVerdictStatus === "string" ? parsed.lastVerdictStatus : null,
|
|
59
|
+
activeFixId: typeof parsed.activeFixId === "string" ? parsed.activeFixId : null,
|
|
60
|
+
phase: typeof parsed.phase === "string" && validPhases.includes(parsed.phase) ? parsed.phase : null,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
logger_1.logger.debug(`failed to read state from ${filePath}: ${e}`);
|
|
65
|
+
return { ...DEFAULT_STATE };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function writeState(sessionDir, state) {
|
|
69
|
+
const filePath = (0, path_1.join)(sessionDir, STATE_FILE);
|
|
70
|
+
try {
|
|
71
|
+
(0, fs_1.mkdirSync)(sessionDir, { recursive: true });
|
|
72
|
+
(0, fs_1.writeFileSync)(filePath, JSON.stringify(state, null, 2));
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
logger_1.logger.debug(`failed to write state to ${filePath}: ${e}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function getActiveVerificationId(sessionDir) {
|
|
79
|
+
const state = readState(sessionDir);
|
|
80
|
+
return state.activeVerificationId ?? undefined;
|
|
81
|
+
}
|
|
82
|
+
function setActiveVerification(sessionDir, verificationId, traceId) {
|
|
83
|
+
const state = readState(sessionDir);
|
|
84
|
+
state.activeVerificationId = verificationId;
|
|
85
|
+
state.activeTraceId = traceId;
|
|
86
|
+
state.phase = "verifying";
|
|
87
|
+
writeState(sessionDir, state);
|
|
88
|
+
}
|
|
89
|
+
function getActiveTraceId(sessionDir) {
|
|
90
|
+
const state = readState(sessionDir);
|
|
91
|
+
return state.activeTraceId ?? undefined;
|
|
92
|
+
}
|
|
93
|
+
function clearActiveVerification(sessionDir) {
|
|
94
|
+
const state = readState(sessionDir);
|
|
95
|
+
state.activeVerificationId = null;
|
|
96
|
+
state.activeTraceId = null;
|
|
97
|
+
state.phase = "coding";
|
|
98
|
+
writeState(sessionDir, state);
|
|
99
|
+
}
|
|
100
|
+
function getRetries(sessionDir) {
|
|
101
|
+
const state = readState(sessionDir);
|
|
102
|
+
return state.retries;
|
|
103
|
+
}
|
|
104
|
+
function incrementRetries(sessionDir) {
|
|
105
|
+
const state = readState(sessionDir);
|
|
106
|
+
state.retries = state.retries + 1;
|
|
107
|
+
writeState(sessionDir, state);
|
|
108
|
+
return state.retries;
|
|
109
|
+
}
|
|
110
|
+
function resetRetries(sessionDir) {
|
|
111
|
+
const state = readState(sessionDir);
|
|
112
|
+
state.retries = 0;
|
|
113
|
+
writeState(sessionDir, state);
|
|
114
|
+
}
|
|
115
|
+
function getLastVerdictStatus(sessionDir) {
|
|
116
|
+
const state = readState(sessionDir);
|
|
117
|
+
return state.lastVerdictStatus ?? undefined;
|
|
118
|
+
}
|
|
119
|
+
function setLastVerdictStatus(sessionDir, status) {
|
|
120
|
+
const state = readState(sessionDir);
|
|
121
|
+
state.lastVerdictStatus = status;
|
|
122
|
+
writeState(sessionDir, state);
|
|
123
|
+
}
|
|
124
|
+
function setActiveFix(sessionDir, fixId) {
|
|
125
|
+
const state = readState(sessionDir);
|
|
126
|
+
state.activeFixId = fixId;
|
|
127
|
+
writeState(sessionDir, state);
|
|
128
|
+
}
|
|
129
|
+
function getActiveFixId(sessionDir) {
|
|
130
|
+
const state = readState(sessionDir);
|
|
131
|
+
return state.activeFixId ?? undefined;
|
|
132
|
+
}
|
|
133
|
+
function clearActiveFix(sessionDir) {
|
|
134
|
+
const state = readState(sessionDir);
|
|
135
|
+
state.activeFixId = null;
|
|
136
|
+
writeState(sessionDir, state);
|
|
137
|
+
}
|
|
138
|
+
function setPhase(sessionDir, phase) {
|
|
139
|
+
const state = readState(sessionDir);
|
|
140
|
+
state.phase = phase;
|
|
141
|
+
writeState(sessionDir, state);
|
|
142
|
+
}
|
|
143
|
+
function getPhase(sessionDir) {
|
|
144
|
+
const state = readState(sessionDir);
|
|
145
|
+
return state.phase;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Reconcile session state on session start/resume.
|
|
149
|
+
* Closes any open verification or fix cycles, records appropriate
|
|
150
|
+
* end entries in actions.jsonl, and resets phase to "coding".
|
|
151
|
+
*
|
|
152
|
+
* @param appendFn — action appender function (avoids circular import with actions.ts)
|
|
153
|
+
*/
|
|
154
|
+
function reconcileSessionState(sessionDir, actionsFile, appendFn) {
|
|
155
|
+
const state = readState(sessionDir);
|
|
156
|
+
let dirty = false;
|
|
157
|
+
// close abandoned verification
|
|
158
|
+
if (state.activeVerificationId) {
|
|
159
|
+
appendFn(actionsFile, {
|
|
160
|
+
type: "verification_end",
|
|
161
|
+
timestamp: new Date().toISOString(),
|
|
162
|
+
verification_id: state.activeVerificationId,
|
|
163
|
+
trace_id: state.activeTraceId,
|
|
164
|
+
reason: "session_reconcile",
|
|
165
|
+
});
|
|
166
|
+
logger_1.logger.debug(`reconcile: ended abandoned verification ${state.activeVerificationId}`);
|
|
167
|
+
state.activeVerificationId = null;
|
|
168
|
+
state.activeTraceId = null;
|
|
169
|
+
dirty = true;
|
|
170
|
+
}
|
|
171
|
+
// close abandoned fix
|
|
172
|
+
if (state.activeFixId) {
|
|
173
|
+
appendFn(actionsFile, {
|
|
174
|
+
type: "fix_end",
|
|
175
|
+
timestamp: new Date().toISOString(),
|
|
176
|
+
fix_id: state.activeFixId,
|
|
177
|
+
reason: "session_reconcile",
|
|
178
|
+
});
|
|
179
|
+
logger_1.logger.debug(`reconcile: ended abandoned fix ${state.activeFixId}`);
|
|
180
|
+
state.activeFixId = null;
|
|
181
|
+
dirty = true;
|
|
182
|
+
}
|
|
183
|
+
// reset phase to coding
|
|
184
|
+
if (state.phase !== "coding") {
|
|
185
|
+
state.phase = "coding";
|
|
186
|
+
dirty = true;
|
|
187
|
+
}
|
|
188
|
+
if (dirty) {
|
|
189
|
+
writeState(sessionDir, state);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=session-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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;
|
|
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;AAYD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgH9F"}
|
|
@@ -10,38 +10,15 @@
|
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.runSubmitVerdict = runSubmitVerdict;
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
13
14
|
const fs_1 = require("fs");
|
|
14
15
|
const path_1 = require("path");
|
|
15
16
|
const logger_1 = require("../../lib/logger");
|
|
16
17
|
const telemetry_1 = require("../../lib/telemetry");
|
|
17
18
|
const actions_1 = require("./actions");
|
|
18
|
-
|
|
19
|
-
if (!(0, fs_1.existsSync)(actionsFile)) {
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
try {
|
|
23
|
-
const content = (0, fs_1.readFileSync)(actionsFile, "utf-8");
|
|
24
|
-
const lines = content.trim().split("\n").filter((l) => l.length > 0);
|
|
25
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
26
|
-
try {
|
|
27
|
-
const entry = JSON.parse(lines[i]);
|
|
28
|
-
if (entry.type === "verdict_write") {
|
|
29
|
-
const verdict = entry.verdict;
|
|
30
|
-
return typeof verdict.status === "string" ? verdict.status : undefined;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
// skip malformed lines
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
19
|
+
const session_state_1 = require("./session-state");
|
|
43
20
|
async function runSubmitVerdict(input) {
|
|
44
|
-
const { sessionId, verdictFile, actionsFile, verdictJson } = input;
|
|
21
|
+
const { sessionId, sessionDir, verdictFile, actionsFile, verdictJson } = input;
|
|
45
22
|
// parse JSON
|
|
46
23
|
let verdict;
|
|
47
24
|
try {
|
|
@@ -76,7 +53,7 @@ async function runSubmitVerdict(input) {
|
|
|
76
53
|
}
|
|
77
54
|
// validate fixes — required when pass after a previous fail
|
|
78
55
|
if (verdict.status === "pass") {
|
|
79
|
-
const lastStatus = getLastVerdictStatus(
|
|
56
|
+
const lastStatus = (0, session_state_1.getLastVerdictStatus)(sessionDir);
|
|
80
57
|
if (lastStatus === "fail") {
|
|
81
58
|
if (!Array.isArray(verdict.fixes) || verdict.fixes.length === 0) {
|
|
82
59
|
return { success: false, message: "REJECTED: when status is \"pass\" after a previous fail, fixes must be a non-empty array describing what was fixed." };
|
|
@@ -92,14 +69,45 @@ async function runSubmitVerdict(input) {
|
|
|
92
69
|
logger_1.logger.debug(`submit-verdict: failed to write ${verdictFile}: ${e}`);
|
|
93
70
|
return { success: false, message: `REJECTED: failed to write verdict file: ${e}` };
|
|
94
71
|
}
|
|
72
|
+
// update last verdict status in session state
|
|
73
|
+
(0, session_state_1.setLastVerdictStatus)(sessionDir, verdict.status);
|
|
74
|
+
// auto-record verification_end if there's an active verification
|
|
75
|
+
const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
|
|
76
|
+
const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
77
|
+
if (verificationId) {
|
|
78
|
+
const endEntry = {
|
|
79
|
+
type: "verification_end",
|
|
80
|
+
timestamp: new Date().toISOString(),
|
|
81
|
+
verification_id: verificationId,
|
|
82
|
+
trace_id: traceId,
|
|
83
|
+
};
|
|
84
|
+
(0, actions_1.appendAction)(actionsFile, endEntry);
|
|
85
|
+
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
86
|
+
logger_1.logger.debug(`verification-end (auto): ${verificationId} trace=${traceId}`);
|
|
87
|
+
}
|
|
95
88
|
// record verdict_write action
|
|
96
89
|
const entry = {
|
|
97
90
|
type: "verdict_write",
|
|
98
91
|
timestamp: new Date().toISOString(),
|
|
92
|
+
verification_id: verificationId,
|
|
93
|
+
trace_id: traceId,
|
|
99
94
|
verdict: verdict,
|
|
100
95
|
};
|
|
101
96
|
(0, actions_1.appendAction)(actionsFile, entry);
|
|
102
97
|
await (0, telemetry_1.trackVerdictWrite)(sessionId, verdict.status);
|
|
98
|
+
// record fix_start when verdict is fail
|
|
99
|
+
if (verdict.status === "fail") {
|
|
100
|
+
const fixId = (0, crypto_1.randomUUID)();
|
|
101
|
+
const fixEntry = {
|
|
102
|
+
type: "fix_start",
|
|
103
|
+
timestamp: new Date().toISOString(),
|
|
104
|
+
fix_id: fixId,
|
|
105
|
+
};
|
|
106
|
+
(0, actions_1.appendAction)(actionsFile, fixEntry);
|
|
107
|
+
(0, session_state_1.setActiveFix)(sessionDir, fixId);
|
|
108
|
+
(0, session_state_1.setPhase)(sessionDir, "fixing");
|
|
109
|
+
logger_1.logger.debug(`fix-start: ${fixId} (verdict was fail)`);
|
|
110
|
+
}
|
|
103
111
|
logger_1.logger.debug(`submit-verdict: session=${sessionId} status=${verdict.status}`);
|
|
104
112
|
if (verdict.status === "pass") {
|
|
105
113
|
const fixesInfo = verdict.fixes?.length ? ` Fixes: ${verdict.fixes.join(", ")}` : "";
|
|
@@ -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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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IronBee — Verification Lifecycle Core Logic
|
|
3
|
+
*
|
|
4
|
+
* Manages verification start/end boundaries.
|
|
5
|
+
* Each verification cycle gets a unique ID and an OTEL-compatible trace ID
|
|
6
|
+
* linking start → end → verdict.
|
|
7
|
+
*/
|
|
8
|
+
export interface VerificationStartInput {
|
|
9
|
+
sessionId: string;
|
|
10
|
+
sessionDir: string;
|
|
11
|
+
actionsFile: string;
|
|
12
|
+
}
|
|
13
|
+
export interface VerificationStartResult {
|
|
14
|
+
verificationId: string;
|
|
15
|
+
traceId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface VerificationEndInput {
|
|
18
|
+
sessionId: string;
|
|
19
|
+
sessionDir: string;
|
|
20
|
+
actionsFile: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VerificationEndResult {
|
|
23
|
+
success: boolean;
|
|
24
|
+
verificationId?: string;
|
|
25
|
+
traceId?: string;
|
|
26
|
+
message: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function startVerification(input: VerificationStartInput): VerificationStartResult;
|
|
29
|
+
export declare function endVerification(input: VerificationEndInput): VerificationEndResult;
|
|
30
|
+
//# sourceMappingURL=verification-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;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,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,uBAAuB,CA8CxF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAsBlF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IronBee — Verification Lifecycle Core Logic
|
|
4
|
+
*
|
|
5
|
+
* Manages verification start/end boundaries.
|
|
6
|
+
* Each verification cycle gets a unique ID and an OTEL-compatible trace ID
|
|
7
|
+
* linking start → end → verdict.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.startVerification = startVerification;
|
|
11
|
+
exports.endVerification = endVerification;
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
const logger_1 = require("../../lib/logger");
|
|
14
|
+
const actions_1 = require("./actions");
|
|
15
|
+
const session_state_1 = require("./session-state");
|
|
16
|
+
function startVerification(input) {
|
|
17
|
+
const { sessionDir, actionsFile } = input;
|
|
18
|
+
// if there's an active fix, end it before starting verification
|
|
19
|
+
const activeFixId = (0, session_state_1.getActiveFixId)(sessionDir);
|
|
20
|
+
if (activeFixId) {
|
|
21
|
+
const fixEndEntry = {
|
|
22
|
+
type: "fix_end",
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
fix_id: activeFixId,
|
|
25
|
+
};
|
|
26
|
+
(0, actions_1.appendAction)(actionsFile, fixEndEntry);
|
|
27
|
+
(0, session_state_1.clearActiveFix)(sessionDir);
|
|
28
|
+
logger_1.logger.debug(`fix-end: ${activeFixId} (starting new verification)`);
|
|
29
|
+
}
|
|
30
|
+
// if there's already an active verification, end it first
|
|
31
|
+
const existingId = (0, session_state_1.getActiveVerificationId)(sessionDir);
|
|
32
|
+
if (existingId) {
|
|
33
|
+
const existingTraceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
34
|
+
logger_1.logger.debug(`ending previous verification ${existingId} before starting new one`);
|
|
35
|
+
const endEntry = {
|
|
36
|
+
type: "verification_end",
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
verification_id: existingId,
|
|
39
|
+
trace_id: existingTraceId,
|
|
40
|
+
};
|
|
41
|
+
(0, actions_1.appendAction)(actionsFile, endEntry);
|
|
42
|
+
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
43
|
+
}
|
|
44
|
+
const verificationId = (0, crypto_1.randomUUID)();
|
|
45
|
+
const traceId = (0, session_state_1.generateTraceId)();
|
|
46
|
+
const entry = {
|
|
47
|
+
type: "verification_start",
|
|
48
|
+
timestamp: new Date().toISOString(),
|
|
49
|
+
verification_id: verificationId,
|
|
50
|
+
trace_id: traceId,
|
|
51
|
+
};
|
|
52
|
+
(0, actions_1.appendAction)(actionsFile, entry);
|
|
53
|
+
(0, session_state_1.setActiveVerification)(sessionDir, verificationId, traceId);
|
|
54
|
+
logger_1.logger.debug(`verification-start: ${verificationId} trace=${traceId}`);
|
|
55
|
+
return { verificationId, traceId };
|
|
56
|
+
}
|
|
57
|
+
function endVerification(input) {
|
|
58
|
+
const { sessionDir, actionsFile } = input;
|
|
59
|
+
const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
|
|
60
|
+
if (!verificationId) {
|
|
61
|
+
return { success: false, message: "No active verification to end." };
|
|
62
|
+
}
|
|
63
|
+
const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
|
|
64
|
+
const entry = {
|
|
65
|
+
type: "verification_end",
|
|
66
|
+
timestamp: new Date().toISOString(),
|
|
67
|
+
verification_id: verificationId,
|
|
68
|
+
trace_id: traceId,
|
|
69
|
+
};
|
|
70
|
+
(0, actions_1.appendAction)(actionsFile, entry);
|
|
71
|
+
(0, session_state_1.clearActiveVerification)(sessionDir);
|
|
72
|
+
logger_1.logger.debug(`verification-end: ${verificationId} trace=${traceId}`);
|
|
73
|
+
return { success: true, verificationId, traceId, message: `Verification ${verificationId} ended.` };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=verification-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification-lifecycle.js","sourceRoot":"","sources":["../../../src/hooks/core/verification-lifecycle.ts"],"names":[],"mappings":"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"}
|