@llm-dev-ops/agentics-cli 1.4.13 → 1.4.15
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/dist/adapters/base-adapter.d.ts.map +1 -1
- package/dist/adapters/base-adapter.js +66 -18
- package/dist/adapters/base-adapter.js.map +1 -1
- package/dist/agents/cli-ux-agent.d.ts +9 -3
- package/dist/agents/cli-ux-agent.d.ts.map +1 -1
- package/dist/agents/cli-ux-agent.js +13 -67
- package/dist/agents/cli-ux-agent.js.map +1 -1
- package/dist/agents/decision-event.d.ts +1 -1
- package/dist/agents/decision-event.d.ts.map +1 -1
- package/dist/agents/decision-event.js +12 -7
- package/dist/agents/decision-event.js.map +1 -1
- package/dist/auth/internal-allowlist.d.ts +19 -17
- package/dist/auth/internal-allowlist.d.ts.map +1 -1
- package/dist/auth/internal-allowlist.js +20 -90
- package/dist/auth/internal-allowlist.js.map +1 -1
- package/dist/auth/role-permissions.d.ts +23 -6
- package/dist/auth/role-permissions.d.ts.map +1 -1
- package/dist/auth/role-permissions.js +25 -37
- package/dist/auth/role-permissions.js.map +1 -1
- package/dist/cli/index.js +346 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/demo.d.ts +30 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +393 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/diligence.d.ts.map +1 -1
- package/dist/commands/diligence.js +10 -15
- package/dist/commands/diligence.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +5 -7
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/inspect.d.ts +17 -4
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +189 -77
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/quantify.d.ts.map +1 -1
- package/dist/commands/quantify.js +12 -0
- package/dist/commands/quantify.js.map +1 -1
- package/dist/commands/readiness.d.ts +47 -0
- package/dist/commands/readiness.d.ts.map +1 -0
- package/dist/commands/readiness.js +270 -0
- package/dist/commands/readiness.js.map +1 -0
- package/dist/commands/simulate.d.ts +6 -0
- package/dist/commands/simulate.d.ts.map +1 -1
- package/dist/commands/simulate.js +167 -123
- package/dist/commands/simulate.js.map +1 -1
- package/dist/commands/whoami.js +3 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config/endpoints.js +2 -2
- package/dist/config/endpoints.js.map +1 -1
- package/dist/contracts/adr-command-semantics.js +3 -3
- package/dist/contracts/adr-command-semantics.js.map +1 -1
- package/dist/contracts/canonical.d.ts +207 -0
- package/dist/contracts/canonical.d.ts.map +1 -0
- package/dist/contracts/canonical.js +191 -0
- package/dist/contracts/canonical.js.map +1 -0
- package/dist/contracts/index.d.ts +3 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/schemas/index.d.ts +194 -5
- package/dist/contracts/schemas/index.d.ts.map +1 -1
- package/dist/contracts/schemas/index.js +106 -0
- package/dist/contracts/schemas/index.js.map +1 -1
- package/dist/contracts/validator.d.ts +1 -1
- package/dist/contracts/validator.d.ts.map +1 -1
- package/dist/contracts/validator.js +17 -5
- package/dist/contracts/validator.js.map +1 -1
- package/dist/gates/argument-guard.js +1 -1
- package/dist/gates/argument-guard.js.map +1 -1
- package/dist/gates/execution-gate.d.ts +24 -54
- package/dist/gates/execution-gate.d.ts.map +1 -1
- package/dist/gates/execution-gate.js +79 -166
- package/dist/gates/execution-gate.js.map +1 -1
- package/dist/gates/index.d.ts +6 -0
- package/dist/gates/index.d.ts.map +1 -1
- package/dist/gates/index.js +8 -0
- package/dist/gates/index.js.map +1 -1
- package/dist/gates/meta-simulation-detector.d.ts +48 -0
- package/dist/gates/meta-simulation-detector.d.ts.map +1 -0
- package/dist/gates/meta-simulation-detector.js +45 -0
- package/dist/gates/meta-simulation-detector.js.map +1 -0
- package/dist/gates/readiness-gate.d.ts +108 -0
- package/dist/gates/readiness-gate.d.ts.map +1 -0
- package/dist/gates/readiness-gate.js +194 -0
- package/dist/gates/readiness-gate.js.map +1 -0
- package/dist/gates/ruvector-acceptance-gate.d.ts +78 -0
- package/dist/gates/ruvector-acceptance-gate.d.ts.map +1 -0
- package/dist/gates/ruvector-acceptance-gate.js +191 -0
- package/dist/gates/ruvector-acceptance-gate.js.map +1 -0
- package/dist/modules/artifact-handoff.d.ts.map +1 -1
- package/dist/modules/artifact-handoff.js +26 -0
- package/dist/modules/artifact-handoff.js.map +1 -1
- package/dist/modules/command-parser.d.ts +1 -1
- package/dist/modules/command-parser.d.ts.map +1 -1
- package/dist/modules/command-parser.js +3 -1
- package/dist/modules/command-parser.js.map +1 -1
- package/dist/modules/output-renderer.d.ts +13 -1
- package/dist/modules/output-renderer.d.ts.map +1 -1
- package/dist/modules/output-renderer.js +68 -0
- package/dist/modules/output-renderer.js.map +1 -1
- package/dist/runtime/claude-code-runner.d.ts.map +1 -1
- package/dist/runtime/claude-code-runner.js +165 -0
- package/dist/runtime/claude-code-runner.js.map +1 -1
- package/dist/synthesis/dynamic-router.d.ts +80 -0
- package/dist/synthesis/dynamic-router.d.ts.map +1 -0
- package/dist/synthesis/dynamic-router.js +63 -0
- package/dist/synthesis/dynamic-router.js.map +1 -0
- package/dist/synthesis/prompts/index.d.ts.map +1 -1
- package/dist/synthesis/prompts/index.js +100 -23
- package/dist/synthesis/prompts/index.js.map +1 -1
- package/dist/types/index.d.ts +59 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Readiness Gate — Gate 7 (Execution Safety Enforcement)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Enforce that write-path commands (deploy run, erp export in
|
|
5
|
+
* execute mode, rollback, live sync) are blocked when the platform state
|
|
6
|
+
* is INTEGRATION_READY_EXECUTION_GATED. This gate ensures no ERP writes
|
|
7
|
+
* or production deployments occur until all prerequisites are met.
|
|
8
|
+
*
|
|
9
|
+
* INVARIANTS ENFORCED:
|
|
10
|
+
* - No production writes when execution_gate is LOCKED
|
|
11
|
+
* - No deploy run / deploy rollback when connectors are missing
|
|
12
|
+
* - No erp export --mode=execute when systems are BLOCKED
|
|
13
|
+
* - Read-only and integration-mode commands always allowed
|
|
14
|
+
*
|
|
15
|
+
* EXIT CODE: 111 (READINESS_GATE_VIOLATION)
|
|
16
|
+
*
|
|
17
|
+
* BEHAVIOR:
|
|
18
|
+
* - Commands that perform external writes (deploy run, deploy rollback)
|
|
19
|
+
* are blocked when the readiness state has execution_gate.locked = true.
|
|
20
|
+
* - Commands that are read-only (readiness show, inspect, erp list) are
|
|
21
|
+
* always permitted regardless of readiness state.
|
|
22
|
+
* - The gate reads state from ~/.agentics/exports/decision-readiness/readiness-state.json.
|
|
23
|
+
* If the file does not exist, the gate assumes INSPECTION_ONLY (most restrictive).
|
|
24
|
+
*/
|
|
25
|
+
import type { CommandObject } from '../types/index.js';
|
|
26
|
+
export declare const READINESS_GATE_EXIT_CODE = 111;
|
|
27
|
+
/**
|
|
28
|
+
* Canonical readiness states.
|
|
29
|
+
* Transitions: INSPECTION_ONLY -> INTEGRATION_READY_EXECUTION_GATED -> EXECUTION_READY
|
|
30
|
+
*/
|
|
31
|
+
export type ReadinessState = 'INSPECTION_ONLY' | 'INTEGRATION_READY_EXECUTION_GATED' | 'EXECUTION_READY';
|
|
32
|
+
export interface ReadinessGateResult {
|
|
33
|
+
/** Whether the command passed readiness validation */
|
|
34
|
+
allowed: boolean;
|
|
35
|
+
/** Error message if validation failed */
|
|
36
|
+
message: string;
|
|
37
|
+
/** Exit code if validation failed */
|
|
38
|
+
exitCode: number;
|
|
39
|
+
/** Whether this command requires readiness validation */
|
|
40
|
+
readinessRequired: boolean;
|
|
41
|
+
/** Current readiness state (if loaded) */
|
|
42
|
+
state?: ReadinessState;
|
|
43
|
+
}
|
|
44
|
+
export interface ReadinessStateFile {
|
|
45
|
+
schema: string;
|
|
46
|
+
state: ReadinessState;
|
|
47
|
+
simulation_id: string;
|
|
48
|
+
plan_ref: string;
|
|
49
|
+
determined_at: string;
|
|
50
|
+
execution_gate: {
|
|
51
|
+
locked: boolean;
|
|
52
|
+
reason: string;
|
|
53
|
+
prerequisites_total: number;
|
|
54
|
+
prerequisites_completed: number;
|
|
55
|
+
critical_blockers: Array<{
|
|
56
|
+
id: number;
|
|
57
|
+
system: string;
|
|
58
|
+
severity: string;
|
|
59
|
+
effort: string;
|
|
60
|
+
}>;
|
|
61
|
+
};
|
|
62
|
+
integration_readiness: {
|
|
63
|
+
entities_ready: number;
|
|
64
|
+
entities_blocked: number;
|
|
65
|
+
entities_total: number;
|
|
66
|
+
readiness_pct: number;
|
|
67
|
+
systems_ready: string[];
|
|
68
|
+
systems_blocked: string[];
|
|
69
|
+
};
|
|
70
|
+
financial_posture: {
|
|
71
|
+
annual_api_spend_usd: number;
|
|
72
|
+
year1_investment_usd: number;
|
|
73
|
+
annual_savings_usd: number;
|
|
74
|
+
roi_payback_months: number;
|
|
75
|
+
npv_5yr_usd: number;
|
|
76
|
+
};
|
|
77
|
+
audit_matrix: {
|
|
78
|
+
result: string;
|
|
79
|
+
checks_passed: number;
|
|
80
|
+
checks_total: number;
|
|
81
|
+
last_audit: string;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Load readiness state from the canonical artifact path.
|
|
86
|
+
* Returns null if the file does not exist or is invalid.
|
|
87
|
+
*/
|
|
88
|
+
export declare function loadReadinessState(): ReadinessStateFile | null;
|
|
89
|
+
/**
|
|
90
|
+
* Check whether a command passes readiness validation.
|
|
91
|
+
* Returns a result indicating whether the command is allowed.
|
|
92
|
+
*
|
|
93
|
+
* Write-path commands are blocked when:
|
|
94
|
+
* 1. The readiness state file exists AND execution_gate.locked === true
|
|
95
|
+
* 2. The readiness state file does not exist (defaults to most restrictive)
|
|
96
|
+
*
|
|
97
|
+
* Read-only commands always pass.
|
|
98
|
+
*/
|
|
99
|
+
export declare function checkReadinessGate(cmd: CommandObject): ReadinessGateResult;
|
|
100
|
+
/**
|
|
101
|
+
* Enforce readiness gate — exits the process if validation fails.
|
|
102
|
+
*/
|
|
103
|
+
export declare function enforceReadinessGate(cmd: CommandObject): void;
|
|
104
|
+
/**
|
|
105
|
+
* Check if a command requires readiness validation.
|
|
106
|
+
*/
|
|
107
|
+
export declare function requiresReadinessValidation(primary: string, sub?: string): boolean;
|
|
108
|
+
//# sourceMappingURL=readiness-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness-gate.d.ts","sourceRoot":"","sources":["../../src/gates/readiness-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,mCAAmC,GACnC,iBAAiB,CAAC;AAiCtB,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE;QACd,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,mBAAmB,EAAE,MAAM,CAAC;QAC5B,uBAAuB,EAAE,MAAM,CAAC;QAChC,iBAAiB,EAAE,KAAK,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACJ,CAAC;IACF,qBAAqB,EAAE;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,iBAAiB,EAAE;QACjB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI,CAc9D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,mBAAmB,CA8E1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAc7D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAMlF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Readiness Gate — Gate 7 (Execution Safety Enforcement)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Enforce that write-path commands (deploy run, erp export in
|
|
5
|
+
* execute mode, rollback, live sync) are blocked when the platform state
|
|
6
|
+
* is INTEGRATION_READY_EXECUTION_GATED. This gate ensures no ERP writes
|
|
7
|
+
* or production deployments occur until all prerequisites are met.
|
|
8
|
+
*
|
|
9
|
+
* INVARIANTS ENFORCED:
|
|
10
|
+
* - No production writes when execution_gate is LOCKED
|
|
11
|
+
* - No deploy run / deploy rollback when connectors are missing
|
|
12
|
+
* - No erp export --mode=execute when systems are BLOCKED
|
|
13
|
+
* - Read-only and integration-mode commands always allowed
|
|
14
|
+
*
|
|
15
|
+
* EXIT CODE: 111 (READINESS_GATE_VIOLATION)
|
|
16
|
+
*
|
|
17
|
+
* BEHAVIOR:
|
|
18
|
+
* - Commands that perform external writes (deploy run, deploy rollback)
|
|
19
|
+
* are blocked when the readiness state has execution_gate.locked = true.
|
|
20
|
+
* - Commands that are read-only (readiness show, inspect, erp list) are
|
|
21
|
+
* always permitted regardless of readiness state.
|
|
22
|
+
* - The gate reads state from ~/.agentics/exports/decision-readiness/readiness-state.json.
|
|
23
|
+
* If the file does not exist, the gate assumes INSPECTION_ONLY (most restrictive).
|
|
24
|
+
*/
|
|
25
|
+
import * as fs from 'node:fs';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
import * as os from 'node:os';
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Constants
|
|
30
|
+
// ============================================================================
|
|
31
|
+
export const READINESS_GATE_EXIT_CODE = 111;
|
|
32
|
+
/**
|
|
33
|
+
* Commands + subcommands that require execution mode to be unlocked.
|
|
34
|
+
* These commands perform writes to external systems and are blocked
|
|
35
|
+
* when the readiness state is not EXECUTION_READY.
|
|
36
|
+
*/
|
|
37
|
+
const WRITE_COMMANDS = new Map([
|
|
38
|
+
['deploy', new Set(['run', 'rollback'])],
|
|
39
|
+
]);
|
|
40
|
+
/**
|
|
41
|
+
* Commands that are always exempt from readiness validation.
|
|
42
|
+
* These are identity, read-only, or introspection commands.
|
|
43
|
+
*/
|
|
44
|
+
const READINESS_EXEMPT_COMMANDS = new Set([
|
|
45
|
+
'help',
|
|
46
|
+
'version',
|
|
47
|
+
'login',
|
|
48
|
+
'logout',
|
|
49
|
+
'whoami',
|
|
50
|
+
'usage',
|
|
51
|
+
'readiness',
|
|
52
|
+
'inspect',
|
|
53
|
+
'policy',
|
|
54
|
+
'audit',
|
|
55
|
+
'demo',
|
|
56
|
+
]);
|
|
57
|
+
// ============================================================================
|
|
58
|
+
// State Loader
|
|
59
|
+
// ============================================================================
|
|
60
|
+
const READINESS_STATE_PATH = path.join(os.homedir(), '.agentics', 'exports', 'decision-readiness', 'readiness-state.json');
|
|
61
|
+
/**
|
|
62
|
+
* Load readiness state from the canonical artifact path.
|
|
63
|
+
* Returns null if the file does not exist or is invalid.
|
|
64
|
+
*/
|
|
65
|
+
export function loadReadinessState() {
|
|
66
|
+
try {
|
|
67
|
+
if (!fs.existsSync(READINESS_STATE_PATH)) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const content = fs.readFileSync(READINESS_STATE_PATH, 'utf-8');
|
|
71
|
+
const parsed = JSON.parse(content);
|
|
72
|
+
if (!parsed.state || !parsed.execution_gate) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return parsed;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Gate Implementation
|
|
83
|
+
// ============================================================================
|
|
84
|
+
/**
|
|
85
|
+
* Check whether a command passes readiness validation.
|
|
86
|
+
* Returns a result indicating whether the command is allowed.
|
|
87
|
+
*
|
|
88
|
+
* Write-path commands are blocked when:
|
|
89
|
+
* 1. The readiness state file exists AND execution_gate.locked === true
|
|
90
|
+
* 2. The readiness state file does not exist (defaults to most restrictive)
|
|
91
|
+
*
|
|
92
|
+
* Read-only commands always pass.
|
|
93
|
+
*/
|
|
94
|
+
export function checkReadinessGate(cmd) {
|
|
95
|
+
const primary = cmd.command;
|
|
96
|
+
const sub = cmd.subcommand;
|
|
97
|
+
// Exempt commands skip readiness validation
|
|
98
|
+
if (READINESS_EXEMPT_COMMANDS.has(primary)) {
|
|
99
|
+
return { allowed: true, message: '', exitCode: 0, readinessRequired: false };
|
|
100
|
+
}
|
|
101
|
+
// Check if this command+subcommand is a write command
|
|
102
|
+
const writeSubs = WRITE_COMMANDS.get(primary);
|
|
103
|
+
if (!writeSubs || !sub || !writeSubs.has(sub)) {
|
|
104
|
+
// Not a write command — allow
|
|
105
|
+
return { allowed: true, message: '', exitCode: 0, readinessRequired: false };
|
|
106
|
+
}
|
|
107
|
+
// This is a write command — check readiness state
|
|
108
|
+
const state = loadReadinessState();
|
|
109
|
+
// No readiness state file → assume most restrictive (block writes)
|
|
110
|
+
if (!state) {
|
|
111
|
+
return {
|
|
112
|
+
allowed: false,
|
|
113
|
+
message: `Readiness gate: No readiness state found.\n` +
|
|
114
|
+
`Write command "${primary} ${sub}" requires EXECUTION_READY state.\n` +
|
|
115
|
+
`\n` +
|
|
116
|
+
`Run: agentics readiness show <scenario> to check current state.\n` +
|
|
117
|
+
`Current state: UNKNOWN (no readiness-state.json found)`,
|
|
118
|
+
exitCode: READINESS_GATE_EXIT_CODE,
|
|
119
|
+
readinessRequired: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// EXECUTION_READY → allow all commands
|
|
123
|
+
if (state.state === 'EXECUTION_READY') {
|
|
124
|
+
return {
|
|
125
|
+
allowed: true,
|
|
126
|
+
message: '',
|
|
127
|
+
exitCode: 0,
|
|
128
|
+
readinessRequired: true,
|
|
129
|
+
state: state.state,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Any other state with execution_gate.locked → block writes
|
|
133
|
+
if (state.execution_gate.locked) {
|
|
134
|
+
const blockers = state.execution_gate.critical_blockers
|
|
135
|
+
.map(b => ` - ${b.system} (${b.severity}, ${b.effort})`)
|
|
136
|
+
.join('\n');
|
|
137
|
+
return {
|
|
138
|
+
allowed: false,
|
|
139
|
+
message: `Readiness gate: Execution mode is LOCKED.\n` +
|
|
140
|
+
`Command "${primary} ${sub}" requires EXECUTION_READY state.\n` +
|
|
141
|
+
`\n` +
|
|
142
|
+
`Current state: ${state.state}\n` +
|
|
143
|
+
`Reason: ${state.execution_gate.reason}\n` +
|
|
144
|
+
`Prerequisites: ${state.execution_gate.prerequisites_completed}/${state.execution_gate.prerequisites_total} completed\n` +
|
|
145
|
+
`\n` +
|
|
146
|
+
`Critical blockers:\n${blockers}\n` +
|
|
147
|
+
`\n` +
|
|
148
|
+
`Run: agentics readiness show ${state.simulation_id} for full status.`,
|
|
149
|
+
exitCode: READINESS_GATE_EXIT_CODE,
|
|
150
|
+
readinessRequired: true,
|
|
151
|
+
state: state.state,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// execution_gate.locked is false but state is not EXECUTION_READY — allow cautiously
|
|
155
|
+
return {
|
|
156
|
+
allowed: true,
|
|
157
|
+
message: '',
|
|
158
|
+
exitCode: 0,
|
|
159
|
+
readinessRequired: true,
|
|
160
|
+
state: state.state,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Enforce readiness gate — exits the process if validation fails.
|
|
165
|
+
*/
|
|
166
|
+
export function enforceReadinessGate(cmd) {
|
|
167
|
+
const result = checkReadinessGate(cmd);
|
|
168
|
+
if (!result.allowed) {
|
|
169
|
+
console.error(JSON.stringify({
|
|
170
|
+
error: {
|
|
171
|
+
code: 'READINESS_GATE_VIOLATION',
|
|
172
|
+
message: result.message,
|
|
173
|
+
command: `${cmd.command} ${cmd.subcommand ?? ''}`.trim(),
|
|
174
|
+
exit_code: result.exitCode,
|
|
175
|
+
state: result.state ?? 'UNKNOWN',
|
|
176
|
+
},
|
|
177
|
+
}));
|
|
178
|
+
process.exit(result.exitCode);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if a command requires readiness validation.
|
|
183
|
+
*/
|
|
184
|
+
export function requiresReadinessValidation(primary, sub) {
|
|
185
|
+
if (READINESS_EXEMPT_COMMANDS.has(primary))
|
|
186
|
+
return false;
|
|
187
|
+
const writeSubs = WRITE_COMMANDS.get(primary);
|
|
188
|
+
if (!writeSubs)
|
|
189
|
+
return false;
|
|
190
|
+
if (!sub)
|
|
191
|
+
return false;
|
|
192
|
+
return writeSubs.has(sub);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=readiness-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness-gate.js","sourceRoot":"","sources":["../../src/gates/readiness-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ruvector Acceptance Gate — Gate 8 (Mandatory Blocking Persistence)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Ensure every enterprise simulation blocks until ruvector-service
|
|
5
|
+
* accepts the execution. No fallback, no best-effort.
|
|
6
|
+
*
|
|
7
|
+
* INVARIANTS ENFORCED:
|
|
8
|
+
* - ADR-004 Invariant 1: Every simulation has a memory footprint
|
|
9
|
+
* - Ruvector acceptance is BLOCKING, not best-effort
|
|
10
|
+
* - Failure to persist to ruvector is a COMMAND FAILURE, not a warning
|
|
11
|
+
*
|
|
12
|
+
* EXIT CODE: 141 (RUVECTOR_ACCEPTANCE_FAILED)
|
|
13
|
+
*
|
|
14
|
+
* FORBIDDEN:
|
|
15
|
+
* - try/catch swallowing of ruvector errors
|
|
16
|
+
* - Fallback to local-only persistence
|
|
17
|
+
* - Warning-level logging for persistence failures
|
|
18
|
+
* - Proceeding without ruvector acceptance
|
|
19
|
+
*/
|
|
20
|
+
import type { RuvectorRootedGraph, RuvectorAcceptanceResult, DownstreamSpanDescriptor } from '../types/index.js';
|
|
21
|
+
export declare const RUVECTOR_ACCEPTANCE_EXIT_CODE = 141;
|
|
22
|
+
/**
|
|
23
|
+
* Block until ruvector-service accepts the simulation memory record.
|
|
24
|
+
* NO fallback. NO best-effort. Failure throws CLIError.
|
|
25
|
+
*
|
|
26
|
+
* @throws CLIError (ECLI-RUVECTOR-001) if ruvector rejects or is unavailable
|
|
27
|
+
*/
|
|
28
|
+
export declare function blockUntilRuvectorAccepts(simulationId: string, memoryRecord: {
|
|
29
|
+
id: string;
|
|
30
|
+
type: 'simulation';
|
|
31
|
+
intent: string;
|
|
32
|
+
status: string;
|
|
33
|
+
result?: unknown;
|
|
34
|
+
attribution: {
|
|
35
|
+
created_by: string;
|
|
36
|
+
org_id: string;
|
|
37
|
+
};
|
|
38
|
+
artifact_ids: string[];
|
|
39
|
+
created_at: string;
|
|
40
|
+
updated_at: string;
|
|
41
|
+
checksum: string;
|
|
42
|
+
}, correlationId: string): Promise<RuvectorAcceptanceResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Block until ruvector-service accepts a lineage record.
|
|
45
|
+
* NO fallback. NO best-effort. Failure throws CLIError.
|
|
46
|
+
*
|
|
47
|
+
* @throws CLIError (ECLI-RUVECTOR-002) if ruvector rejects or is unavailable
|
|
48
|
+
*/
|
|
49
|
+
export declare function blockUntilLineageAccepted(lineageRecord: {
|
|
50
|
+
id: string;
|
|
51
|
+
artifact_id: string;
|
|
52
|
+
artifact_category: string;
|
|
53
|
+
simulation_id: string;
|
|
54
|
+
plan_id?: string;
|
|
55
|
+
decision_context: string;
|
|
56
|
+
attribution: {
|
|
57
|
+
created_by: string;
|
|
58
|
+
org_id: string;
|
|
59
|
+
};
|
|
60
|
+
governance: {
|
|
61
|
+
gate_pipeline_version: string;
|
|
62
|
+
synthesis_classification: string;
|
|
63
|
+
};
|
|
64
|
+
created_at: string;
|
|
65
|
+
}, correlationId: string): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Build a ruvector-rooted execution graph from downstream span descriptors.
|
|
68
|
+
* ruvector-service is ALWAYS the root node.
|
|
69
|
+
*/
|
|
70
|
+
export declare function buildRuvectorRootedGraph(ruvectorSpanId: string, downstreamSpans: DownstreamSpanDescriptor[]): RuvectorRootedGraph;
|
|
71
|
+
/**
|
|
72
|
+
* Validate that an execution graph has ruvector-service as its root.
|
|
73
|
+
* Throws CLIError if the root is not ruvector-service.
|
|
74
|
+
*
|
|
75
|
+
* @throws CLIError (ECLI-RUVECTOR-003) if root is not ruvector-service
|
|
76
|
+
*/
|
|
77
|
+
export declare function validateRuvectorRootedGraph(graph: RuvectorRootedGraph): void;
|
|
78
|
+
//# sourceMappingURL=ruvector-acceptance-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruvector-acceptance-gate.d.ts","sourceRoot":"","sources":["../../src/gates/ruvector-acceptance-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EAExB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAM3B,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAMjD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,wBAAwB,CAAC,CAwDnC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,UAAU,EAAE;QAAE,qBAAqB,EAAE,MAAM,CAAC;QAAC,wBAAwB,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,UAAU,EAAE,MAAM,CAAC;CACpB,EACD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,wBAAwB,EAAE,GAC1C,mBAAmB,CAgDrB;AAMD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAgB5E"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ruvector Acceptance Gate — Gate 8 (Mandatory Blocking Persistence)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Ensure every enterprise simulation blocks until ruvector-service
|
|
5
|
+
* accepts the execution. No fallback, no best-effort.
|
|
6
|
+
*
|
|
7
|
+
* INVARIANTS ENFORCED:
|
|
8
|
+
* - ADR-004 Invariant 1: Every simulation has a memory footprint
|
|
9
|
+
* - Ruvector acceptance is BLOCKING, not best-effort
|
|
10
|
+
* - Failure to persist to ruvector is a COMMAND FAILURE, not a warning
|
|
11
|
+
*
|
|
12
|
+
* EXIT CODE: 141 (RUVECTOR_ACCEPTANCE_FAILED)
|
|
13
|
+
*
|
|
14
|
+
* FORBIDDEN:
|
|
15
|
+
* - try/catch swallowing of ruvector errors
|
|
16
|
+
* - Fallback to local-only persistence
|
|
17
|
+
* - Warning-level logging for persistence failures
|
|
18
|
+
* - Proceeding without ruvector acceptance
|
|
19
|
+
*/
|
|
20
|
+
import { RuvectorAdapter } from '../adapters/base-adapter.js';
|
|
21
|
+
import { loadEndpointConfig } from '../config/endpoints.js';
|
|
22
|
+
import { CLIError } from '../errors/index.js';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Constants
|
|
25
|
+
// ============================================================================
|
|
26
|
+
export const RUVECTOR_ACCEPTANCE_EXIT_CODE = 141;
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// Blocking Acceptance Functions
|
|
29
|
+
// ============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Block until ruvector-service accepts the simulation memory record.
|
|
32
|
+
* NO fallback. NO best-effort. Failure throws CLIError.
|
|
33
|
+
*
|
|
34
|
+
* @throws CLIError (ECLI-RUVECTOR-001) if ruvector rejects or is unavailable
|
|
35
|
+
*/
|
|
36
|
+
export async function blockUntilRuvectorAccepts(simulationId, memoryRecord, correlationId) {
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
const ruvectorSpanId = `ruvector-span-${crypto.randomUUID()}`;
|
|
39
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
40
|
+
const adapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
41
|
+
try {
|
|
42
|
+
await adapter.storeSimulation(memoryRecord);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
// NO swallowing. Wrap with gate-specific context and re-throw.
|
|
46
|
+
throw new CLIError({
|
|
47
|
+
code: 'ECLI-RUVECTOR-001',
|
|
48
|
+
category: 'DOWNSTREAM_ERROR',
|
|
49
|
+
message: `Ruvector acceptance failed for simulation ${simulationId}: ${error instanceof Error ? error.message : String(error)}`,
|
|
50
|
+
details: {
|
|
51
|
+
simulation_id: simulationId,
|
|
52
|
+
gate: 'ruvector-acceptance',
|
|
53
|
+
invariant: 'ADR-004 Invariant 1',
|
|
54
|
+
},
|
|
55
|
+
module: 'ruvector-gate',
|
|
56
|
+
correlationId,
|
|
57
|
+
recoverable: false,
|
|
58
|
+
exitCode: RUVECTOR_ACCEPTANCE_EXIT_CODE,
|
|
59
|
+
cause: error instanceof Error ? error : undefined,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const timing = Date.now() - startTime;
|
|
63
|
+
const now = new Date().toISOString();
|
|
64
|
+
const rootSpan = {
|
|
65
|
+
span_id: ruvectorSpanId,
|
|
66
|
+
parent_span_id: null,
|
|
67
|
+
service: 'ruvector-service',
|
|
68
|
+
operation: 'accept-simulation',
|
|
69
|
+
status: 'completed',
|
|
70
|
+
started_at: new Date(startTime).toISOString(),
|
|
71
|
+
completed_at: now,
|
|
72
|
+
duration_ms: timing,
|
|
73
|
+
children: [],
|
|
74
|
+
};
|
|
75
|
+
const graph = {
|
|
76
|
+
graph_id: `graph-${crypto.randomUUID()}`,
|
|
77
|
+
root: rootSpan,
|
|
78
|
+
total_spans: 1,
|
|
79
|
+
created_at: now,
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
accepted: true,
|
|
83
|
+
ruvector_span_id: ruvectorSpanId,
|
|
84
|
+
graph,
|
|
85
|
+
timing_ms: timing,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Block until ruvector-service accepts a lineage record.
|
|
90
|
+
* NO fallback. NO best-effort. Failure throws CLIError.
|
|
91
|
+
*
|
|
92
|
+
* @throws CLIError (ECLI-RUVECTOR-002) if ruvector rejects or is unavailable
|
|
93
|
+
*/
|
|
94
|
+
export async function blockUntilLineageAccepted(lineageRecord, correlationId) {
|
|
95
|
+
const ruvectorConfig = loadEndpointConfig('ruvector-service');
|
|
96
|
+
const adapter = new RuvectorAdapter(ruvectorConfig, correlationId);
|
|
97
|
+
try {
|
|
98
|
+
await adapter.storeLineage(lineageRecord);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
throw new CLIError({
|
|
102
|
+
code: 'ECLI-RUVECTOR-002',
|
|
103
|
+
category: 'DOWNSTREAM_ERROR',
|
|
104
|
+
message: `Ruvector acceptance failed for lineage ${lineageRecord.id}: ${error instanceof Error ? error.message : String(error)}`,
|
|
105
|
+
details: {
|
|
106
|
+
lineage_id: lineageRecord.id,
|
|
107
|
+
simulation_id: lineageRecord.simulation_id,
|
|
108
|
+
gate: 'ruvector-acceptance',
|
|
109
|
+
invariant: 'ADR-004 Invariant 2',
|
|
110
|
+
},
|
|
111
|
+
module: 'ruvector-gate',
|
|
112
|
+
correlationId,
|
|
113
|
+
recoverable: false,
|
|
114
|
+
exitCode: RUVECTOR_ACCEPTANCE_EXIT_CODE,
|
|
115
|
+
cause: error instanceof Error ? error : undefined,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// Graph Construction
|
|
121
|
+
// ============================================================================
|
|
122
|
+
/**
|
|
123
|
+
* Build a ruvector-rooted execution graph from downstream span descriptors.
|
|
124
|
+
* ruvector-service is ALWAYS the root node.
|
|
125
|
+
*/
|
|
126
|
+
export function buildRuvectorRootedGraph(ruvectorSpanId, downstreamSpans) {
|
|
127
|
+
const now = new Date().toISOString();
|
|
128
|
+
function descriptorToSpan(descriptor, parentSpanId) {
|
|
129
|
+
const spanId = `span-${crypto.randomUUID()}`;
|
|
130
|
+
const children = (descriptor.children ?? []).map(child => descriptorToSpan(child, spanId));
|
|
131
|
+
return {
|
|
132
|
+
span_id: spanId,
|
|
133
|
+
parent_span_id: parentSpanId,
|
|
134
|
+
service: descriptor.service,
|
|
135
|
+
operation: descriptor.operation,
|
|
136
|
+
status: descriptor.status,
|
|
137
|
+
started_at: descriptor.started_at,
|
|
138
|
+
completed_at: descriptor.completed_at,
|
|
139
|
+
duration_ms: descriptor.duration_ms,
|
|
140
|
+
children,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const childSpans = downstreamSpans.map(d => descriptorToSpan(d, ruvectorSpanId));
|
|
144
|
+
const root = {
|
|
145
|
+
span_id: ruvectorSpanId,
|
|
146
|
+
parent_span_id: null,
|
|
147
|
+
service: 'ruvector-service',
|
|
148
|
+
operation: 'accept-simulation',
|
|
149
|
+
status: 'completed',
|
|
150
|
+
started_at: now,
|
|
151
|
+
completed_at: now,
|
|
152
|
+
duration_ms: 0,
|
|
153
|
+
children: childSpans,
|
|
154
|
+
};
|
|
155
|
+
function countSpans(span) {
|
|
156
|
+
return 1 + span.children.reduce((sum, child) => sum + countSpans(child), 0);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
graph_id: `graph-${crypto.randomUUID()}`,
|
|
160
|
+
root,
|
|
161
|
+
total_spans: countSpans(root),
|
|
162
|
+
created_at: now,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// Graph Validation
|
|
167
|
+
// ============================================================================
|
|
168
|
+
/**
|
|
169
|
+
* Validate that an execution graph has ruvector-service as its root.
|
|
170
|
+
* Throws CLIError if the root is not ruvector-service.
|
|
171
|
+
*
|
|
172
|
+
* @throws CLIError (ECLI-RUVECTOR-003) if root is not ruvector-service
|
|
173
|
+
*/
|
|
174
|
+
export function validateRuvectorRootedGraph(graph) {
|
|
175
|
+
if (graph.root.service !== 'ruvector-service') {
|
|
176
|
+
throw new CLIError({
|
|
177
|
+
code: 'ECLI-RUVECTOR-003',
|
|
178
|
+
category: 'INTERNAL_ERROR',
|
|
179
|
+
message: `Execution graph root is not ruvector-service (actual: ${graph.root.service})`,
|
|
180
|
+
details: {
|
|
181
|
+
graph_id: graph.graph_id,
|
|
182
|
+
actual_root: graph.root.service,
|
|
183
|
+
expected_root: 'ruvector-service',
|
|
184
|
+
},
|
|
185
|
+
module: 'ruvector-gate',
|
|
186
|
+
recoverable: false,
|
|
187
|
+
exitCode: RUVECTOR_ACCEPTANCE_EXIT_CODE,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=ruvector-acceptance-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ruvector-acceptance-gate.js","sourceRoot":"","sources":["../../src/gates/ruvector-acceptance-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-handoff.d.ts","sourceRoot":"","sources":["../../src/modules/artifact-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EAE1B,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAErD;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC;IAEtD;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;CACvF;AAMD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAKpD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"artifact-handoff.d.ts","sourceRoot":"","sources":["../../src/modules/artifact-handoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EAE1B,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;IAErD;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC;IAEtD;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;CACvF;AAMD,qBAAa,eAAgB,YAAW,gBAAgB;IACtD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAKpD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;IAmFrD;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;CAMtF;AAMD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,aAAa,CAExE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,mBAAmB,CAEpF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,eAAe,CAE5E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,eAAe,CAE5E;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,IAAI,yBAAyB,CAEhG;AAMD,wBAAgB,qBAAqB,IAAI,gBAAgB,CAExD"}
|
|
@@ -81,6 +81,32 @@ export class ArtifactHandoff {
|
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
+
// Format 4: Nested response with id inside a domain object
|
|
85
|
+
// Handles: { export: { id }, execution_metadata }, { diligence_package: { id }, execution_metadata },
|
|
86
|
+
// { roi_report: { id }, execution_metadata }, { intent: { id }, execution_metadata }
|
|
87
|
+
const domainKeys = ['export', 'diligence_package', 'roi_report', 'intent', 'deployment', 'simulation'];
|
|
88
|
+
for (const key of domainKeys) {
|
|
89
|
+
if (key in obj && typeof obj[key] === 'object' && obj[key] !== null) {
|
|
90
|
+
const domain = obj[key];
|
|
91
|
+
if ('id' in domain) {
|
|
92
|
+
const typeMap = {
|
|
93
|
+
'export': 'ExportReference',
|
|
94
|
+
'diligence_package': 'DiligencePackage',
|
|
95
|
+
'roi_report': 'ROIReport',
|
|
96
|
+
'intent': 'IntentReference',
|
|
97
|
+
'deployment': 'DeploymentReference',
|
|
98
|
+
'simulation': 'SimulationReference',
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
id: String(domain['id']),
|
|
102
|
+
type: typeMap[key] ?? 'Reference',
|
|
103
|
+
repository: key,
|
|
104
|
+
created_at: 'generated_at' in domain ? String(domain['generated_at']) : new Date().toISOString(),
|
|
105
|
+
checksum: '',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
84
110
|
return null;
|
|
85
111
|
}
|
|
86
112
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-handoff.js","sourceRoot":"","sources":["../../src/modules/artifact-handoff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifact-handoff.js","sourceRoot":"","sources":["../../src/modules/artifact-handoff.ts"],"names":[],"mappings":"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"}
|