@llm-dev-ops/agentics-cli 1.3.2 → 1.3.4

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.js +10 -10
  2. package/dist/adapters/base-adapter.js.map +1 -1
  3. package/dist/audit/audit-trail.js +1 -1
  4. package/dist/cli/index.js +6 -5
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/commands/deploy.d.ts +14 -5
  7. package/dist/commands/deploy.d.ts.map +1 -1
  8. package/dist/commands/deploy.js +58 -16
  9. package/dist/commands/deploy.js.map +1 -1
  10. package/dist/commands/diligence.d.ts +12 -4
  11. package/dist/commands/diligence.d.ts.map +1 -1
  12. package/dist/commands/diligence.js +54 -14
  13. package/dist/commands/diligence.js.map +1 -1
  14. package/dist/commands/export.d.ts +10 -3
  15. package/dist/commands/export.d.ts.map +1 -1
  16. package/dist/commands/export.js +56 -16
  17. package/dist/commands/export.js.map +1 -1
  18. package/dist/commands/inspect.d.ts +13 -7
  19. package/dist/commands/inspect.d.ts.map +1 -1
  20. package/dist/commands/inspect.js +57 -19
  21. package/dist/commands/inspect.js.map +1 -1
  22. package/dist/commands/plan.d.ts +11 -4
  23. package/dist/commands/plan.d.ts.map +1 -1
  24. package/dist/commands/plan.js +39 -12
  25. package/dist/commands/plan.js.map +1 -1
  26. package/dist/commands/quantify.d.ts +12 -6
  27. package/dist/commands/quantify.d.ts.map +1 -1
  28. package/dist/commands/quantify.js +56 -17
  29. package/dist/commands/quantify.js.map +1 -1
  30. package/dist/commands/simulate.d.ts +10 -3
  31. package/dist/commands/simulate.d.ts.map +1 -1
  32. package/dist/commands/simulate.js +69 -18
  33. package/dist/commands/simulate.js.map +1 -1
  34. package/dist/config/endpoints.d.ts.map +1 -1
  35. package/dist/config/endpoints.js +9 -8
  36. package/dist/config/endpoints.js.map +1 -1
  37. package/dist/contracts/index.d.ts +21 -0
  38. package/dist/contracts/index.d.ts.map +1 -0
  39. package/dist/contracts/index.js +20 -0
  40. package/dist/contracts/index.js.map +1 -0
  41. package/dist/contracts/schemas/index.d.ts +427 -0
  42. package/dist/contracts/schemas/index.d.ts.map +1 -0
  43. package/dist/contracts/schemas/index.js +228 -0
  44. package/dist/contracts/schemas/index.js.map +1 -0
  45. package/dist/contracts/validator.d.ts +60 -0
  46. package/dist/contracts/validator.d.ts.map +1 -0
  47. package/dist/contracts/validator.js +395 -0
  48. package/dist/contracts/validator.js.map +1 -0
  49. package/dist/server/index.d.ts +26 -0
  50. package/dist/server/index.d.ts.map +1 -0
  51. package/dist/server/index.js +144 -0
  52. package/dist/server/index.js.map +1 -0
  53. package/dist/server/routes/auth.d.ts +12 -0
  54. package/dist/server/routes/auth.d.ts.map +1 -0
  55. package/dist/server/routes/auth.js +111 -0
  56. package/dist/server/routes/auth.js.map +1 -0
  57. package/dist/server/routes/diligence.d.ts +12 -0
  58. package/dist/server/routes/diligence.d.ts.map +1 -0
  59. package/dist/server/routes/diligence.js +48 -0
  60. package/dist/server/routes/diligence.js.map +1 -0
  61. package/dist/server/routes/erpsurface.d.ts +11 -0
  62. package/dist/server/routes/erpsurface.d.ts.map +1 -0
  63. package/dist/server/routes/erpsurface.js +59 -0
  64. package/dist/server/routes/erpsurface.js.map +1 -0
  65. package/dist/server/routes/exporters.d.ts +12 -0
  66. package/dist/server/routes/exporters.d.ts.map +1 -0
  67. package/dist/server/routes/exporters.js +47 -0
  68. package/dist/server/routes/exporters.js.map +1 -0
  69. package/dist/server/routes/health.d.ts +11 -0
  70. package/dist/server/routes/health.d.ts.map +1 -0
  71. package/dist/server/routes/health.js +33 -0
  72. package/dist/server/routes/health.js.map +1 -0
  73. package/dist/server/routes/index.d.ts +17 -0
  74. package/dist/server/routes/index.d.ts.map +1 -0
  75. package/dist/server/routes/index.js +17 -0
  76. package/dist/server/routes/index.js.map +1 -0
  77. package/dist/server/routes/intent.d.ts +12 -0
  78. package/dist/server/routes/intent.d.ts.map +1 -0
  79. package/dist/server/routes/intent.js +50 -0
  80. package/dist/server/routes/intent.js.map +1 -0
  81. package/dist/server/routes/manifests.d.ts +12 -0
  82. package/dist/server/routes/manifests.d.ts.map +1 -0
  83. package/dist/server/routes/manifests.js +46 -0
  84. package/dist/server/routes/manifests.js.map +1 -0
  85. package/dist/server/routes/plans.d.ts +12 -0
  86. package/dist/server/routes/plans.d.ts.map +1 -0
  87. package/dist/server/routes/plans.js +47 -0
  88. package/dist/server/routes/plans.js.map +1 -0
  89. package/dist/server/routes/roi.d.ts +12 -0
  90. package/dist/server/routes/roi.d.ts.map +1 -0
  91. package/dist/server/routes/roi.js +48 -0
  92. package/dist/server/routes/roi.js.map +1 -0
  93. package/dist/server/routes/runner.d.ts +12 -0
  94. package/dist/server/routes/runner.d.ts.map +1 -0
  95. package/dist/server/routes/runner.js +50 -0
  96. package/dist/server/routes/runner.js.map +1 -0
  97. package/dist/server/routes/simulate.d.ts +13 -0
  98. package/dist/server/routes/simulate.d.ts.map +1 -0
  99. package/dist/server/routes/simulate.js +58 -0
  100. package/dist/server/routes/simulate.js.map +1 -0
  101. package/dist/server/utils/id-generator.d.ts +32 -0
  102. package/dist/server/utils/id-generator.d.ts.map +1 -0
  103. package/dist/server/utils/id-generator.js +51 -0
  104. package/dist/server/utils/id-generator.js.map +1 -0
  105. package/dist/server/utils/index.d.ts +8 -0
  106. package/dist/server/utils/index.d.ts.map +1 -0
  107. package/dist/server/utils/index.js +8 -0
  108. package/dist/server/utils/index.js.map +1 -0
  109. package/dist/server/utils/response-builder.d.ts +56 -0
  110. package/dist/server/utils/response-builder.d.ts.map +1 -0
  111. package/dist/server/utils/response-builder.js +388 -0
  112. package/dist/server/utils/response-builder.js.map +1 -0
  113. package/dist/types/index.d.ts +3 -3
  114. package/dist/types/index.d.ts.map +1 -1
  115. package/dist/types/index.js.map +1 -1
  116. package/package.json +9 -3
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Contract Validator
3
+ *
4
+ * PURPOSE: Single validation boundary for all CLI commands.
5
+ * Uses Ajv in STRICT mode - no coercion, no defaults, no bypass.
6
+ *
7
+ * RULES:
8
+ * - Invalid requests FAIL LOCALLY (no network call)
9
+ * - Invalid responses FAIL HARD (missing execution proof = reject)
10
+ * - Responses MUST have execution_metadata AND multi-layer proof
11
+ * - Multi-layer proof: layers_executed array AND/OR execution_graph
12
+ * - No soft-fail behavior
13
+ * - No bypass flags
14
+ */
15
+ import { CLIError } from '../errors/index.js';
16
+ import { RequestSchemas, ResponseSchemas } from './schemas/index.js';
17
+ export type { PlanRequestContract, ManifestsRequestContract, SimulateRequestContract, InspectRequestContract, QuantifyRequestContract, DeployRequestContract, ExportRequestContract, DiligenceRequestContract, ExecutionMetadata, LayerExecutionRecord, ExecutionGraph, } from './schemas/index.js';
18
+ export { RequestSchemas, ResponseSchemas };
19
+ type RequestSchemaName = 'plan' | 'simulate' | 'inspect' | 'quantify' | 'deploy' | 'export' | 'diligence' | 'manifests' | 'plans';
20
+ type ResponseSchemaName = 'base' | 'manifest' | 'plan' | 'simulation' | 'simulationOutput' | 'roiReport' | 'intent' | 'export' | 'diligencePackage';
21
+ export declare class ContractValidationError extends CLIError {
22
+ readonly validationErrors: object[];
23
+ constructor(options: {
24
+ type: 'request' | 'response';
25
+ schemaName: string;
26
+ errors: object[];
27
+ data?: unknown;
28
+ correlationId?: string;
29
+ });
30
+ }
31
+ /**
32
+ * Validate a request payload against its contract schema.
33
+ * MUST be called BEFORE any network request.
34
+ *
35
+ * @throws ContractValidationError if validation fails
36
+ */
37
+ export declare function validateRequest<T>(schemaName: RequestSchemaName, data: unknown, correlationId?: string): T;
38
+ /**
39
+ * Validate a response payload against its contract schema.
40
+ * CRITICAL: This enforces:
41
+ * 1. execution_metadata REQUIRED
42
+ * 2. Multi-layer execution proof (layers_executed AND/OR execution_graph)
43
+ *
44
+ * @throws ContractValidationError if validation fails or execution proof missing
45
+ */
46
+ export declare function validateResponse<T>(schemaName: ResponseSchemaName, data: unknown, correlationId?: string): T;
47
+ export type ValidationResult<T> = {
48
+ valid: true;
49
+ data: T;
50
+ } | {
51
+ valid: false;
52
+ error: ContractValidationError;
53
+ };
54
+ /**
55
+ * Safe validation that returns a result object instead of throwing.
56
+ * Useful for conditional handling in some scenarios.
57
+ */
58
+ export declare function safeValidateRequest<T>(schemaName: RequestSchemaName, data: unknown, correlationId?: string): ValidationResult<T>;
59
+ export declare function safeValidateResponse<T>(schemaName: ResponseSchemaName, data: unknown, correlationId?: string): ValidationResult<T>;
60
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/contracts/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAwBL,cAAc,EACd,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAgC3C,KAAK,iBAAiB,GAClB,MAAM,GACN,UAAU,GACV,SAAS,GACT,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,OAAO,CAAC;AAkBZ,KAAK,kBAAkB,GACnB,MAAM,GACN,UAAU,GACV,MAAM,GACN,YAAY,GACZ,kBAAkB,GAClB,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,kBAAkB,CAAC;AA2CvB,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;gBAExB,OAAO,EAAE;QACnB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;CAyBF;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAeH;AAMD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,CAAC,CAqDH;AA2LD,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACxB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAErD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAAC,CAAC,CAAC,CAUrB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAAC,CAAC,CAAC,CAUrB"}
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Contract Validator
3
+ *
4
+ * PURPOSE: Single validation boundary for all CLI commands.
5
+ * Uses Ajv in STRICT mode - no coercion, no defaults, no bypass.
6
+ *
7
+ * RULES:
8
+ * - Invalid requests FAIL LOCALLY (no network call)
9
+ * - Invalid responses FAIL HARD (missing execution proof = reject)
10
+ * - Responses MUST have execution_metadata AND multi-layer proof
11
+ * - Multi-layer proof: layers_executed array AND/OR execution_graph
12
+ * - No soft-fail behavior
13
+ * - No bypass flags
14
+ */
15
+ import { Ajv } from 'ajv';
16
+ import ajvFormatsModule from 'ajv-formats';
17
+ import { CLIError } from '../errors/index.js';
18
+ // Import schemas bundled directly into CLI (no external dependency)
19
+ import {
20
+ // Request schemas
21
+ planRequestSchema, simulateRequestSchema, inspectRequestSchema, quantifyRequestSchema, deployRequestSchema, exportRequestSchema, diligenceRequestSchema, manifestsRequestSchema, plansRequestSchema,
22
+ // Response schemas
23
+ baseResponseSchema, manifestResponseSchema, planResponseSchema, simulationResponseSchema, simulationOutputResponseSchema, roiReportResponseSchema, intentResponseSchema, exportResponseSchema, diligencePackageResponseSchema,
24
+ // Execution proof schemas
25
+ platformLayers,
26
+ // Schema registry constants
27
+ RequestSchemas, ResponseSchemas, } from './schemas/index.js';
28
+ // Re-export schema registry constants
29
+ export { RequestSchemas, ResponseSchemas };
30
+ // Get the formats plugin (handle ESM/CJS default export)
31
+ const formatsPlugin = ajvFormatsModule;
32
+ // ============================================================================
33
+ // Ajv Instance Configuration (STRICT MODE)
34
+ // ============================================================================
35
+ const ajv = new Ajv({
36
+ strict: true,
37
+ strictSchema: true,
38
+ strictNumbers: true,
39
+ strictTypes: true,
40
+ strictTuples: true,
41
+ strictRequired: false, // Allow anyOf/oneOf with different required sets
42
+ allowUnionTypes: true,
43
+ validateFormats: true,
44
+ allErrors: true, // Report all errors, not just the first
45
+ verbose: true, // Include schema and data in errors
46
+ coerceTypes: false, // NO type coercion
47
+ useDefaults: false, // NO default values
48
+ removeAdditional: false, // Do not silently remove extra properties
49
+ });
50
+ // Add format validators (date-time, uri, email, etc.)
51
+ formatsPlugin(ajv);
52
+ const requestSchemas = {
53
+ plan: planRequestSchema,
54
+ simulate: simulateRequestSchema,
55
+ inspect: inspectRequestSchema,
56
+ quantify: quantifyRequestSchema,
57
+ deploy: deployRequestSchema,
58
+ export: exportRequestSchema,
59
+ diligence: diligenceRequestSchema,
60
+ manifests: manifestsRequestSchema,
61
+ plans: plansRequestSchema,
62
+ };
63
+ const responseSchemas = {
64
+ base: baseResponseSchema,
65
+ manifest: manifestResponseSchema,
66
+ plan: planResponseSchema,
67
+ simulation: simulationResponseSchema,
68
+ simulationOutput: simulationOutputResponseSchema,
69
+ roiReport: roiReportResponseSchema,
70
+ intent: intentResponseSchema,
71
+ export: exportResponseSchema,
72
+ diligencePackage: diligencePackageResponseSchema,
73
+ };
74
+ // ============================================================================
75
+ // Compiled Validators (cached for performance)
76
+ // ============================================================================
77
+ const compiledRequestValidators = new Map();
78
+ const compiledResponseValidators = new Map();
79
+ function getRequestValidator(schemaName) {
80
+ let validator = compiledRequestValidators.get(schemaName);
81
+ if (!validator) {
82
+ validator = ajv.compile(requestSchemas[schemaName]);
83
+ compiledRequestValidators.set(schemaName, validator);
84
+ }
85
+ return validator;
86
+ }
87
+ function getResponseValidator(schemaName) {
88
+ let validator = compiledResponseValidators.get(schemaName);
89
+ if (!validator) {
90
+ validator = ajv.compile(responseSchemas[schemaName]);
91
+ compiledResponseValidators.set(schemaName, validator);
92
+ }
93
+ return validator;
94
+ }
95
+ // ============================================================================
96
+ // Validation Error Class
97
+ // ============================================================================
98
+ export class ContractValidationError extends CLIError {
99
+ validationErrors;
100
+ constructor(options) {
101
+ const errorSummary = options.errors
102
+ .slice(0, 3)
103
+ .map((e) => `${e.instancePath || '/'}: ${e.message}`)
104
+ .join('; ');
105
+ super({
106
+ code: options.type === 'request' ? 'ECLI-CONTRACT-REQ-001' : 'ECLI-CONTRACT-RES-001',
107
+ category: options.type === 'request' ? 'INPUT_ERROR' : 'DOWNSTREAM_ERROR',
108
+ message: options.type === 'request'
109
+ ? `Request validation failed against contract '${options.schemaName}': ${errorSummary}`
110
+ : `Response missing required execution proof or violates contract '${options.schemaName}': ${errorSummary}`,
111
+ details: {
112
+ schema: options.schemaName,
113
+ validation_errors: options.errors,
114
+ data_preview: options.data ? JSON.stringify(options.data).slice(0, 200) : undefined,
115
+ },
116
+ module: 'contracts',
117
+ correlationId: options.correlationId,
118
+ recoverable: false,
119
+ exitCode: options.type === 'request' ? 100 : 140,
120
+ });
121
+ this.name = 'ContractValidationError';
122
+ this.validationErrors = options.errors;
123
+ }
124
+ }
125
+ // ============================================================================
126
+ // Request Validation Functions
127
+ // ============================================================================
128
+ /**
129
+ * Validate a request payload against its contract schema.
130
+ * MUST be called BEFORE any network request.
131
+ *
132
+ * @throws ContractValidationError if validation fails
133
+ */
134
+ export function validateRequest(schemaName, data, correlationId) {
135
+ const validator = getRequestValidator(schemaName);
136
+ const valid = validator(data);
137
+ if (!valid) {
138
+ throw new ContractValidationError({
139
+ type: 'request',
140
+ schemaName,
141
+ errors: validator.errors ?? [],
142
+ data,
143
+ correlationId,
144
+ });
145
+ }
146
+ return data;
147
+ }
148
+ // ============================================================================
149
+ // Response Validation Functions
150
+ // ============================================================================
151
+ /**
152
+ * Validate a response payload against its contract schema.
153
+ * CRITICAL: This enforces:
154
+ * 1. execution_metadata REQUIRED
155
+ * 2. Multi-layer execution proof (layers_executed AND/OR execution_graph)
156
+ *
157
+ * @throws ContractValidationError if validation fails or execution proof missing
158
+ */
159
+ export function validateResponse(schemaName, data, correlationId) {
160
+ // ========================================================================
161
+ // STEP 1: Verify execution_metadata exists (hard requirement)
162
+ // ========================================================================
163
+ if (!hasExecutionMetadata(data)) {
164
+ throw new ContractValidationError({
165
+ type: 'response',
166
+ schemaName,
167
+ errors: [{
168
+ instancePath: '/execution_metadata',
169
+ message: 'Response missing required execution_metadata - cannot prove execution graph participation',
170
+ keyword: 'required',
171
+ params: { missingProperty: 'execution_metadata' },
172
+ }],
173
+ data,
174
+ correlationId,
175
+ });
176
+ }
177
+ // ========================================================================
178
+ // STEP 2: Verify multi-layer execution proof exists
179
+ // Responses MUST have either:
180
+ // - layers_executed array with layer execution records
181
+ // - execution_graph with node participation evidence
182
+ // ========================================================================
183
+ const proofResult = validateMultiLayerExecutionProof(data);
184
+ if (!proofResult.valid) {
185
+ throw new ContractValidationError({
186
+ type: 'response',
187
+ schemaName,
188
+ errors: proofResult.errors,
189
+ data,
190
+ correlationId,
191
+ });
192
+ }
193
+ // ========================================================================
194
+ // STEP 3: Validate full response schema
195
+ // ========================================================================
196
+ const validator = getResponseValidator(schemaName);
197
+ const valid = validator(data);
198
+ if (!valid) {
199
+ throw new ContractValidationError({
200
+ type: 'response',
201
+ schemaName,
202
+ errors: validator.errors ?? [],
203
+ data,
204
+ correlationId,
205
+ });
206
+ }
207
+ return data;
208
+ }
209
+ /**
210
+ * Validate that execution_metadata exists and has required fields.
211
+ * This is a hard requirement - responses without it are REJECTED.
212
+ */
213
+ function hasExecutionMetadata(data) {
214
+ if (!data || typeof data !== 'object') {
215
+ return false;
216
+ }
217
+ const obj = data;
218
+ const meta = obj['execution_metadata'];
219
+ if (!meta || typeof meta !== 'object') {
220
+ return false;
221
+ }
222
+ const metadata = meta;
223
+ // All required fields must be present
224
+ return (typeof metadata['execution_id'] === 'string' &&
225
+ typeof metadata['layer'] === 'string' &&
226
+ typeof metadata['timestamp'] === 'string' &&
227
+ typeof metadata['checksum'] === 'string');
228
+ }
229
+ /**
230
+ * Validate multi-layer execution proof.
231
+ * Responses MUST have at least one of:
232
+ * - layers_executed: array of layer execution records
233
+ * - execution_graph: DAG showing node participation
234
+ *
235
+ * This proves the response traversed the execution graph.
236
+ */
237
+ function validateMultiLayerExecutionProof(data) {
238
+ if (!data || typeof data !== 'object') {
239
+ return {
240
+ valid: false,
241
+ errors: [{
242
+ instancePath: '/',
243
+ message: 'Response must be an object',
244
+ keyword: 'type',
245
+ params: { type: 'object' },
246
+ }],
247
+ };
248
+ }
249
+ const obj = data;
250
+ const hasLayersExecuted = Array.isArray(obj['layers_executed']) && obj['layers_executed'].length > 0;
251
+ const hasExecutionGraph = obj['execution_graph'] && typeof obj['execution_graph'] === 'object';
252
+ // At least one form of multi-layer proof is required
253
+ if (!hasLayersExecuted && !hasExecutionGraph) {
254
+ return {
255
+ valid: false,
256
+ errors: [{
257
+ instancePath: '/',
258
+ message: 'Response missing multi-layer execution proof - must include layers_executed array OR execution_graph',
259
+ keyword: 'anyOf',
260
+ params: { missingProperty: 'layers_executed OR execution_graph' },
261
+ }],
262
+ };
263
+ }
264
+ // If layers_executed is present, validate it has required structure
265
+ if (hasLayersExecuted) {
266
+ const layersExecuted = obj['layers_executed'];
267
+ const layerErrors = [];
268
+ for (let i = 0; i < layersExecuted.length; i++) {
269
+ const record = layersExecuted[i];
270
+ if (!record || typeof record !== 'object') {
271
+ layerErrors.push({
272
+ instancePath: `/layers_executed/${i}`,
273
+ message: 'Layer execution record must be an object',
274
+ keyword: 'type',
275
+ params: { type: 'object' },
276
+ });
277
+ continue;
278
+ }
279
+ // Validate required fields
280
+ if (typeof record['layer'] !== 'string') {
281
+ layerErrors.push({
282
+ instancePath: `/layers_executed/${i}/layer`,
283
+ message: 'Layer execution record missing layer identifier',
284
+ keyword: 'required',
285
+ params: { missingProperty: 'layer' },
286
+ });
287
+ }
288
+ else if (!platformLayers.includes(record['layer'])) {
289
+ layerErrors.push({
290
+ instancePath: `/layers_executed/${i}/layer`,
291
+ message: `Invalid layer '${record['layer']}' - must be one of: ${platformLayers.join(', ')}`,
292
+ keyword: 'enum',
293
+ params: { allowedValues: platformLayers },
294
+ });
295
+ }
296
+ if (typeof record['execution_id'] !== 'string') {
297
+ layerErrors.push({
298
+ instancePath: `/layers_executed/${i}/execution_id`,
299
+ message: 'Layer execution record missing execution_id',
300
+ keyword: 'required',
301
+ params: { missingProperty: 'execution_id' },
302
+ });
303
+ }
304
+ if (typeof record['timestamp'] !== 'string') {
305
+ layerErrors.push({
306
+ instancePath: `/layers_executed/${i}/timestamp`,
307
+ message: 'Layer execution record missing timestamp',
308
+ keyword: 'required',
309
+ params: { missingProperty: 'timestamp' },
310
+ });
311
+ }
312
+ if (typeof record['status'] !== 'string') {
313
+ layerErrors.push({
314
+ instancePath: `/layers_executed/${i}/status`,
315
+ message: 'Layer execution record missing status',
316
+ keyword: 'required',
317
+ params: { missingProperty: 'status' },
318
+ });
319
+ }
320
+ }
321
+ if (layerErrors.length > 0) {
322
+ return { valid: false, errors: layerErrors };
323
+ }
324
+ }
325
+ // If execution_graph is present, validate it has required structure
326
+ if (hasExecutionGraph) {
327
+ const graph = obj['execution_graph'];
328
+ const graphErrors = [];
329
+ if (typeof graph['graph_id'] !== 'string') {
330
+ graphErrors.push({
331
+ instancePath: '/execution_graph/graph_id',
332
+ message: 'Execution graph missing graph_id',
333
+ keyword: 'required',
334
+ params: { missingProperty: 'graph_id' },
335
+ });
336
+ }
337
+ if (typeof graph['root_node'] !== 'string') {
338
+ graphErrors.push({
339
+ instancePath: '/execution_graph/root_node',
340
+ message: 'Execution graph missing root_node',
341
+ keyword: 'required',
342
+ params: { missingProperty: 'root_node' },
343
+ });
344
+ }
345
+ if (!Array.isArray(graph['nodes']) || graph['nodes'].length === 0) {
346
+ graphErrors.push({
347
+ instancePath: '/execution_graph/nodes',
348
+ message: 'Execution graph must have at least one node',
349
+ keyword: 'minItems',
350
+ params: { limit: 1 },
351
+ });
352
+ }
353
+ if (typeof graph['created_at'] !== 'string') {
354
+ graphErrors.push({
355
+ instancePath: '/execution_graph/created_at',
356
+ message: 'Execution graph missing created_at timestamp',
357
+ keyword: 'required',
358
+ params: { missingProperty: 'created_at' },
359
+ });
360
+ }
361
+ if (graphErrors.length > 0) {
362
+ return { valid: false, errors: graphErrors };
363
+ }
364
+ }
365
+ return { valid: true, errors: [] };
366
+ }
367
+ /**
368
+ * Safe validation that returns a result object instead of throwing.
369
+ * Useful for conditional handling in some scenarios.
370
+ */
371
+ export function safeValidateRequest(schemaName, data, correlationId) {
372
+ try {
373
+ const validated = validateRequest(schemaName, data, correlationId);
374
+ return { valid: true, data: validated };
375
+ }
376
+ catch (error) {
377
+ if (error instanceof ContractValidationError) {
378
+ return { valid: false, error };
379
+ }
380
+ throw error;
381
+ }
382
+ }
383
+ export function safeValidateResponse(schemaName, data, correlationId) {
384
+ try {
385
+ const validated = validateResponse(schemaName, data, correlationId);
386
+ return { valid: true, data: validated };
387
+ }
388
+ catch (error) {
389
+ if (error instanceof ContractValidationError) {
390
+ return { valid: false, error };
391
+ }
392
+ throw error;
393
+ }
394
+ }
395
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/contracts/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,oEAAoE;AACpE,OAAO;AACL,kBAAkB;AAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB;AAClB,mBAAmB;AACnB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B;AAC9B,0BAA0B;AAC1B,cAAc;AACd,4BAA4B;AAC5B,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAiB5B,sCAAsC;AACtC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAE3C,yDAAyD;AACzD,MAAM,aAAa,GAAkB,gBAA4C,CAAC;AAElF,+EAA+E;AAC/E,2CAA2C;AAC3C,+EAA+E;AAE/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAClB,MAAM,EAAE,IAAI;IACZ,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,IAAI;IACnB,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,KAAK,EAAE,iDAAiD;IACxE,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,IAAI;IACrB,SAAS,EAAE,IAAI,EAAE,wCAAwC;IACzD,OAAO,EAAE,IAAI,EAAI,oCAAoC;IACrD,WAAW,EAAE,KAAK,EAAE,mBAAmB;IACvC,WAAW,EAAE,KAAK,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,KAAK,EAAE,0CAA0C;CACpE,CAAC,CAAC;AAEH,sDAAsD;AACtD,aAAa,CAAC,GAAG,CAAC,CAAC;AAiBnB,MAAM,cAAc,GAAsC;IACxD,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,oBAAoB;IAC7B,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,mBAAmB;IAC3B,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAE,sBAAsB;IACjC,KAAK,EAAE,kBAAkB;CAC1B,CAAC;AAiBF,MAAM,eAAe,GAAuC;IAC1D,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,IAAI,EAAE,kBAAkB;IACxB,UAAU,EAAE,wBAAwB;IACpC,gBAAgB,EAAE,8BAA8B;IAChD,SAAS,EAAE,uBAAuB;IAClC,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,oBAAoB;IAC5B,gBAAgB,EAAE,8BAA8B;CACjD,CAAC;AAEF,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAqD,CAAC;AAC/F,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAAsD,CAAC;AAEjG,SAAS,mBAAmB,CAAC,UAA6B;IACxD,IAAI,SAAS,GAAG,yBAAyB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,yBAAyB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,UAA8B;IAC1D,IAAI,SAAS,GAAG,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,0BAA0B,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IAC1C,gBAAgB,CAAW;IAEpC,YAAY,OAMX;QACC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM;aAChC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACzD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,KAAK,CAAC;YACJ,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB;YACpF,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB;YACzE,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS;gBACjC,CAAC,CAAC,+CAA+C,OAAO,CAAC,UAAU,MAAM,YAAY,EAAE;gBACvF,CAAC,CAAC,mEAAmE,OAAO,CAAC,UAAU,MAAM,YAAY,EAAE;YAC7G,OAAO,EAAE;gBACP,MAAM,EAAE,OAAO,CAAC,UAAU;gBAC1B,iBAAiB,EAAE,OAAO,CAAC,MAAM;gBACjC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF;YACD,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IACzC,CAAC;CACF;AAED,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,UAA6B,EAC7B,IAAa,EACb,aAAsB;IAEtB,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,uBAAuB,CAAC;YAChC,IAAI,EAAE,SAAS;YACf,UAAU;YACV,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;YAC9B,IAAI;YACJ,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAA8B,EAC9B,IAAa,EACb,aAAsB;IAEtB,2EAA2E;IAC3E,8DAA8D;IAC9D,2EAA2E;IAC3E,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,uBAAuB,CAAC;YAChC,IAAI,EAAE,UAAU;YAChB,UAAU;YACV,MAAM,EAAE,CAAC;oBACP,YAAY,EAAE,qBAAqB;oBACnC,OAAO,EAAE,2FAA2F;oBACpG,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,oBAAoB,EAAE;iBAClD,CAAC;YACF,IAAI;YACJ,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,oDAAoD;IACpD,8BAA8B;IAC9B,uDAAuD;IACvD,qDAAqD;IACrD,2EAA2E;IAC3E,MAAM,WAAW,GAAG,gCAAgC,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,uBAAuB,CAAC;YAChC,IAAI,EAAE,UAAU;YAChB,UAAU;YACV,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,IAAI;YACJ,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,wCAAwC;IACxC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,uBAAuB,CAAC;YAChC,IAAI,EAAE,UAAU;YAChB,UAAU;YACV,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE;YAC9B,IAAI;YACJ,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,IAA+B,CAAC;IAEjD,sCAAsC;IACtC,OAAO,CACL,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,QAAQ;QAC5C,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ;QACrC,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,QAAQ;QACzC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,QAAQ,CACzC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gCAAgC,CAAC,IAAa;IACrD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC;oBACP,YAAY,EAAE,GAAG;oBACjB,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACrG,MAAM,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC;IAE/F,qDAAqD;IACrD,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC;oBACP,YAAY,EAAE,GAAG;oBACjB,OAAO,EAAE,sGAAsG;oBAC/G,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,EAAE,eAAe,EAAE,oCAAoC,EAAE;iBAClE,CAAC;SACH,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,GAAG,CAAC,iBAAiB,CAAc,CAAC;QAC3D,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAA4B,CAAC;YAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,EAAE;oBACrC,OAAO,EAAE,0CAA0C;oBACnD,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,2BAA2B;YAC3B,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACxC,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,QAAQ;oBAC3C,OAAO,EAAE,iDAAiD;oBAC1D,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE;iBACrC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAQ,CAAC,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,QAAQ;oBAC3C,OAAO,EAAE,kBAAkB,MAAM,CAAC,OAAO,CAAC,uBAAuB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC5F,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE;iBAC1C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC/C,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,eAAe;oBAClD,OAAO,EAAE,6CAA6C;oBACtD,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE;iBAC5C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,YAAY;oBAC/C,OAAO,EAAE,0CAA0C;oBACnD,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACzC,WAAW,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,oBAAoB,CAAC,SAAS;oBAC5C,OAAO,EAAE,uCAAuC;oBAChD,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAA4B,CAAC;QAChE,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY,EAAE,2BAA2B;gBACzC,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;aACxC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY,EAAE,4BAA4B;gBAC1C,OAAO,EAAE,mCAAmC;gBAC5C,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE;aACzC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY,EAAE,wBAAwB;gBACtC,OAAO,EAAE,6CAA6C;gBACtD,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC5C,WAAW,CAAC,IAAI,CAAC;gBACf,YAAY,EAAE,6BAA6B;gBAC3C,OAAO,EAAE,8CAA8C;gBACvD,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAA6B,EAC7B,IAAa,EACb,aAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,eAAe,CAAI,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAA8B,EAC9B,IAAa,EACb,aAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,gBAAgB,CAAI,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Agentics Platform API Server
3
+ *
4
+ * Hono-based backend API server providing stub implementations
5
+ * for all agentics platform services.
6
+ *
7
+ * Routes:
8
+ * - GET /health - Health check
9
+ * - GET /ready - Readiness check
10
+ * - POST /v1/cli/auth/sessions - OAuth device flow session creation
11
+ * - GET /v1/cli/auth/sessions/:code - Poll auth status
12
+ * - POST /v1/simulate - Simulation engine (inspect command)
13
+ * - POST /v1/manifests - Manifests service (plan command)
14
+ * - POST /v1/plans - Planner service (plan command)
15
+ * - POST /v1/runner - Runner service (simulate command)
16
+ * - POST /v1/roi - ROI engine (quantify command)
17
+ * - POST /v1/intent - Intent service (deploy command)
18
+ * - POST /v1/exporters - Exporters service (export command)
19
+ * - POST /v1/diligence - Diligence service (diligence command)
20
+ * - POST /v1/erpsurface - ERP Surface service (ERP integration)
21
+ */
22
+ import { Hono } from 'hono';
23
+ declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
24
+ export { app };
25
+ export default app;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,QAAA,MAAM,GAAG,4EAAa,CAAC;AAsIvB,OAAO,EAAE,GAAG,EAAE,CAAC;AACf,eAAe,GAAG,CAAC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Agentics Platform API Server
3
+ *
4
+ * Hono-based backend API server providing stub implementations
5
+ * for all agentics platform services.
6
+ *
7
+ * Routes:
8
+ * - GET /health - Health check
9
+ * - GET /ready - Readiness check
10
+ * - POST /v1/cli/auth/sessions - OAuth device flow session creation
11
+ * - GET /v1/cli/auth/sessions/:code - Poll auth status
12
+ * - POST /v1/simulate - Simulation engine (inspect command)
13
+ * - POST /v1/manifests - Manifests service (plan command)
14
+ * - POST /v1/plans - Planner service (plan command)
15
+ * - POST /v1/runner - Runner service (simulate command)
16
+ * - POST /v1/roi - ROI engine (quantify command)
17
+ * - POST /v1/intent - Intent service (deploy command)
18
+ * - POST /v1/exporters - Exporters service (export command)
19
+ * - POST /v1/diligence - Diligence service (diligence command)
20
+ * - POST /v1/erpsurface - ERP Surface service (ERP integration)
21
+ */
22
+ import { serve } from '@hono/node-server';
23
+ import { Hono } from 'hono';
24
+ import { cors } from 'hono/cors';
25
+ import { logger } from 'hono/logger';
26
+ import { simulate, manifests, plans, runner, roi, intent, exporters, diligence, health, auth, erpsurface, } from './routes/index.js';
27
+ // ============================================================================
28
+ // App Configuration
29
+ // ============================================================================
30
+ const app = new Hono();
31
+ // Middleware
32
+ app.use('*', logger());
33
+ app.use('*', cors({
34
+ origin: '*',
35
+ allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
36
+ allowHeaders: ['Content-Type', 'Authorization', 'X-Correlation-ID', 'X-Trace-ID'],
37
+ credentials: true,
38
+ }));
39
+ // ============================================================================
40
+ // Route Registration
41
+ // ============================================================================
42
+ // Health check (root level)
43
+ app.route('/health', health);
44
+ // Readiness check
45
+ app.get('/ready', (c) => {
46
+ return c.json({
47
+ ready: true,
48
+ timestamp: new Date().toISOString(),
49
+ });
50
+ });
51
+ // Root endpoint
52
+ app.get('/', (c) => {
53
+ return c.json({
54
+ name: 'Agentics Platform API',
55
+ version: process.env['npm_package_version'] ?? '1.0.0',
56
+ documentation: 'https://platform.agentics.dev/docs',
57
+ });
58
+ });
59
+ // Legacy status endpoint
60
+ app.get('/api/v1/status', (c) => {
61
+ return c.json({
62
+ operational: true,
63
+ timestamp: new Date().toISOString(),
64
+ });
65
+ });
66
+ // Auth routes
67
+ app.route('/v1/cli/auth', auth);
68
+ // API v1 routes
69
+ app.route('/v1/simulate', simulate);
70
+ app.route('/v1/manifests', manifests);
71
+ app.route('/v1/plans', plans);
72
+ app.route('/v1/runner', runner);
73
+ app.route('/v1/roi', roi);
74
+ app.route('/v1/intent', intent);
75
+ app.route('/v1/exporters', exporters);
76
+ app.route('/v1/diligence', diligence);
77
+ app.route('/v1/erpsurface', erpsurface);
78
+ // ============================================================================
79
+ // Error Handling
80
+ // ============================================================================
81
+ app.notFound((c) => {
82
+ return c.json({
83
+ error: {
84
+ code: 'NOT_FOUND',
85
+ message: `Route ${c.req.method} ${c.req.path} not found`,
86
+ available_routes: [
87
+ 'GET /health',
88
+ 'GET /ready',
89
+ 'POST /v1/cli/auth/sessions',
90
+ 'GET /v1/cli/auth/sessions/:device_code',
91
+ 'POST /v1/simulate',
92
+ 'POST /v1/manifests',
93
+ 'POST /v1/plans',
94
+ 'POST /v1/runner',
95
+ 'POST /v1/roi',
96
+ 'POST /v1/intent',
97
+ 'POST /v1/exporters',
98
+ 'POST /v1/diligence',
99
+ 'POST /v1/erpsurface',
100
+ ],
101
+ },
102
+ }, 404);
103
+ });
104
+ app.onError((err, c) => {
105
+ console.error('Unhandled error:', err);
106
+ return c.json({
107
+ error: {
108
+ code: 'INTERNAL_ERROR',
109
+ message: process.env['NODE_ENV'] === 'production'
110
+ ? 'An error occurred'
111
+ : (err.message ?? 'An unexpected error occurred'),
112
+ },
113
+ }, 500);
114
+ });
115
+ // ============================================================================
116
+ // Server Startup
117
+ // ============================================================================
118
+ const PORT = parseInt(process.env['PORT'] ?? '8080', 10);
119
+ console.log(`Starting Agentics Platform API Server...`);
120
+ console.log(`Environment: ${process.env['NODE_ENV'] ?? 'development'}`);
121
+ serve({
122
+ fetch: app.fetch,
123
+ port: PORT,
124
+ }, (info) => {
125
+ console.log(`Server running at http://localhost:${info.port}`);
126
+ console.log(`\nAvailable endpoints:`);
127
+ console.log(` GET http://localhost:${info.port}/health`);
128
+ console.log(` GET http://localhost:${info.port}/ready`);
129
+ console.log(` POST http://localhost:${info.port}/v1/cli/auth/sessions`);
130
+ console.log(` GET http://localhost:${info.port}/v1/cli/auth/sessions/:device_code`);
131
+ console.log(` POST http://localhost:${info.port}/v1/simulate`);
132
+ console.log(` POST http://localhost:${info.port}/v1/manifests`);
133
+ console.log(` POST http://localhost:${info.port}/v1/plans`);
134
+ console.log(` POST http://localhost:${info.port}/v1/runner`);
135
+ console.log(` POST http://localhost:${info.port}/v1/roi`);
136
+ console.log(` POST http://localhost:${info.port}/v1/intent`);
137
+ console.log(` POST http://localhost:${info.port}/v1/exporters`);
138
+ console.log(` POST http://localhost:${info.port}/v1/diligence`);
139
+ console.log(` POST http://localhost:${info.port}/v1/erpsurface`);
140
+ });
141
+ // Export for testing and programmatic use
142
+ export { app };
143
+ export default app;
144
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}