@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.
Files changed (116) hide show
  1. package/dist/adapters/base-adapter.d.ts.map +1 -1
  2. package/dist/adapters/base-adapter.js +66 -18
  3. package/dist/adapters/base-adapter.js.map +1 -1
  4. package/dist/agents/cli-ux-agent.d.ts +9 -3
  5. package/dist/agents/cli-ux-agent.d.ts.map +1 -1
  6. package/dist/agents/cli-ux-agent.js +13 -67
  7. package/dist/agents/cli-ux-agent.js.map +1 -1
  8. package/dist/agents/decision-event.d.ts +1 -1
  9. package/dist/agents/decision-event.d.ts.map +1 -1
  10. package/dist/agents/decision-event.js +12 -7
  11. package/dist/agents/decision-event.js.map +1 -1
  12. package/dist/auth/internal-allowlist.d.ts +19 -17
  13. package/dist/auth/internal-allowlist.d.ts.map +1 -1
  14. package/dist/auth/internal-allowlist.js +20 -90
  15. package/dist/auth/internal-allowlist.js.map +1 -1
  16. package/dist/auth/role-permissions.d.ts +23 -6
  17. package/dist/auth/role-permissions.d.ts.map +1 -1
  18. package/dist/auth/role-permissions.js +25 -37
  19. package/dist/auth/role-permissions.js.map +1 -1
  20. package/dist/cli/index.js +346 -33
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/commands/demo.d.ts +30 -0
  23. package/dist/commands/demo.d.ts.map +1 -0
  24. package/dist/commands/demo.js +393 -0
  25. package/dist/commands/demo.js.map +1 -0
  26. package/dist/commands/diligence.d.ts.map +1 -1
  27. package/dist/commands/diligence.js +10 -15
  28. package/dist/commands/diligence.js.map +1 -1
  29. package/dist/commands/export.d.ts.map +1 -1
  30. package/dist/commands/export.js +5 -7
  31. package/dist/commands/export.js.map +1 -1
  32. package/dist/commands/inspect.d.ts +17 -4
  33. package/dist/commands/inspect.d.ts.map +1 -1
  34. package/dist/commands/inspect.js +189 -77
  35. package/dist/commands/inspect.js.map +1 -1
  36. package/dist/commands/quantify.d.ts.map +1 -1
  37. package/dist/commands/quantify.js +12 -0
  38. package/dist/commands/quantify.js.map +1 -1
  39. package/dist/commands/readiness.d.ts +47 -0
  40. package/dist/commands/readiness.d.ts.map +1 -0
  41. package/dist/commands/readiness.js +270 -0
  42. package/dist/commands/readiness.js.map +1 -0
  43. package/dist/commands/simulate.d.ts +6 -0
  44. package/dist/commands/simulate.d.ts.map +1 -1
  45. package/dist/commands/simulate.js +167 -123
  46. package/dist/commands/simulate.js.map +1 -1
  47. package/dist/commands/whoami.js +3 -3
  48. package/dist/commands/whoami.js.map +1 -1
  49. package/dist/config/endpoints.js +2 -2
  50. package/dist/config/endpoints.js.map +1 -1
  51. package/dist/contracts/adr-command-semantics.js +3 -3
  52. package/dist/contracts/adr-command-semantics.js.map +1 -1
  53. package/dist/contracts/canonical.d.ts +207 -0
  54. package/dist/contracts/canonical.d.ts.map +1 -0
  55. package/dist/contracts/canonical.js +191 -0
  56. package/dist/contracts/canonical.js.map +1 -0
  57. package/dist/contracts/index.d.ts +3 -1
  58. package/dist/contracts/index.d.ts.map +1 -1
  59. package/dist/contracts/index.js +2 -0
  60. package/dist/contracts/index.js.map +1 -1
  61. package/dist/contracts/schemas/index.d.ts +194 -5
  62. package/dist/contracts/schemas/index.d.ts.map +1 -1
  63. package/dist/contracts/schemas/index.js +106 -0
  64. package/dist/contracts/schemas/index.js.map +1 -1
  65. package/dist/contracts/validator.d.ts +1 -1
  66. package/dist/contracts/validator.d.ts.map +1 -1
  67. package/dist/contracts/validator.js +17 -5
  68. package/dist/contracts/validator.js.map +1 -1
  69. package/dist/gates/argument-guard.js +1 -1
  70. package/dist/gates/argument-guard.js.map +1 -1
  71. package/dist/gates/execution-gate.d.ts +24 -54
  72. package/dist/gates/execution-gate.d.ts.map +1 -1
  73. package/dist/gates/execution-gate.js +79 -166
  74. package/dist/gates/execution-gate.js.map +1 -1
  75. package/dist/gates/index.d.ts +6 -0
  76. package/dist/gates/index.d.ts.map +1 -1
  77. package/dist/gates/index.js +8 -0
  78. package/dist/gates/index.js.map +1 -1
  79. package/dist/gates/meta-simulation-detector.d.ts +48 -0
  80. package/dist/gates/meta-simulation-detector.d.ts.map +1 -0
  81. package/dist/gates/meta-simulation-detector.js +45 -0
  82. package/dist/gates/meta-simulation-detector.js.map +1 -0
  83. package/dist/gates/readiness-gate.d.ts +108 -0
  84. package/dist/gates/readiness-gate.d.ts.map +1 -0
  85. package/dist/gates/readiness-gate.js +194 -0
  86. package/dist/gates/readiness-gate.js.map +1 -0
  87. package/dist/gates/ruvector-acceptance-gate.d.ts +78 -0
  88. package/dist/gates/ruvector-acceptance-gate.d.ts.map +1 -0
  89. package/dist/gates/ruvector-acceptance-gate.js +191 -0
  90. package/dist/gates/ruvector-acceptance-gate.js.map +1 -0
  91. package/dist/modules/artifact-handoff.d.ts.map +1 -1
  92. package/dist/modules/artifact-handoff.js +26 -0
  93. package/dist/modules/artifact-handoff.js.map +1 -1
  94. package/dist/modules/command-parser.d.ts +1 -1
  95. package/dist/modules/command-parser.d.ts.map +1 -1
  96. package/dist/modules/command-parser.js +3 -1
  97. package/dist/modules/command-parser.js.map +1 -1
  98. package/dist/modules/output-renderer.d.ts +13 -1
  99. package/dist/modules/output-renderer.d.ts.map +1 -1
  100. package/dist/modules/output-renderer.js +68 -0
  101. package/dist/modules/output-renderer.js.map +1 -1
  102. package/dist/runtime/claude-code-runner.d.ts.map +1 -1
  103. package/dist/runtime/claude-code-runner.js +165 -0
  104. package/dist/runtime/claude-code-runner.js.map +1 -1
  105. package/dist/synthesis/dynamic-router.d.ts +80 -0
  106. package/dist/synthesis/dynamic-router.d.ts.map +1 -0
  107. package/dist/synthesis/dynamic-router.js +63 -0
  108. package/dist/synthesis/dynamic-router.js.map +1 -0
  109. package/dist/synthesis/prompts/index.d.ts.map +1 -1
  110. package/dist/synthesis/prompts/index.js +100 -23
  111. package/dist/synthesis/prompts/index.js.map +1 -1
  112. package/dist/types/index.d.ts +59 -0
  113. package/dist/types/index.d.ts.map +1 -1
  114. package/dist/types/index.js +8 -0
  115. package/dist/types/index.js.map +1 -1
  116. 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;IAwDrD;;;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"}
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":"AAAA;;;;;;;;;;;;;;GAcG;AAoCH,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,WAAW,CAA0B,QAAW;QAC9C,+CAA+C;QAC/C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,IAAa;QAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAA+B,CAAC;QAE5C,yEAAyE;QACzE,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,YAAY,IAAI,GAAG,EAAE,CAAC;YACxD,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAkB;gBAClC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACrC,UAAU,EAAE,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtF,QAAQ,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;aAC3D,CAAC;QACJ,CAAC;QAED,qGAAqG;QACrG,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7E,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAA4B,CAAC;YACpD,IAAI,UAAU,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAA4B,CAAC;gBAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAuB,CAAC;gBACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAuB,CAAC;gBAC9D,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAuB,CAAC;gBAElE,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO;wBACL,EAAE,EAAE,MAAM;wBACV,IAAI,EAAE,eAAgC;wBACtC,UAAU,EAAE,6BAA6B;wBACzC,UAAU,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACjD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;qBACrD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,IAAI,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACnF,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAA4B,CAAC;YACxD,IAAI,cAAc,IAAI,MAAM,EAAE,CAAC;gBAC7B,OAAO;oBACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAClC,IAAI,EAAE,qBAAsC;oBAC5C,UAAU,EAAE,4BAA4B;oBACxC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACpC,QAAQ,EAAE,EAAE;iBACb,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,sGAAsG;QACtG,qFAAqF;QACrF,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QACvG,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAA4B,CAAC;gBACnD,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAkC;wBAC7C,QAAQ,EAAE,iBAAkC;wBAC5C,mBAAmB,EAAE,kBAAmC;wBACxD,YAAY,EAAE,WAA4B;wBAC1C,QAAQ,EAAE,iBAAkC;wBAC5C,YAAY,EAAE,qBAAsC;wBACpD,YAAY,EAAE,qBAAsC;qBACrD,CAAC;oBACF,OAAO;wBACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACxB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAK,WAA6B;wBACpD,UAAU,EAAE,GAAG;wBACf,UAAU,EAAE,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBAChG,QAAQ,EAAE,EAAE;qBACb,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,GAAkB,EAAE,gBAA0C;QACzE,OAAO;YACL,GAAG;YACH,GAAG,gBAAgB;SACpB,CAAC;IACJ,CAAC;CACF;AAED,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,MAAM,UAAU,eAAe,CAAC,GAAkB;IAChD,OAAO,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,OAAO,GAAG,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAkB;IAClD,OAAO,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAkB;IAClD,OAAO,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAkB;IAC5D,OAAO,GAAG,CAAC,IAAI,KAAK,2BAA2B,CAAC;AAClD,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC"}