rea-agents 1.7.0 → 2.0.0

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 (156) hide show
  1. package/README.md +38 -31
  2. package/dist/application/CapabilityInventory.js +18 -0
  3. package/dist/application/CrossVersionInvestigation.js +10 -6
  4. package/dist/application/Doctor.js +56 -6
  5. package/dist/application/ElectronBoundaryAnalysis.js +96 -0
  6. package/dist/application/ElectronBoundaryGraph.js +9 -0
  7. package/dist/application/ElectronBoundaryGraphContext.js +62 -0
  8. package/dist/application/ElectronBoundaryGraphIpc.js +242 -0
  9. package/dist/application/ElectronBoundaryGraphNative.js +86 -0
  10. package/dist/application/ElectronBoundaryGraphWindows.js +199 -0
  11. package/dist/application/EnhancedTools.js +38 -13
  12. package/dist/application/InvestigationProviders.js +30 -0
  13. package/dist/application/JavaScriptApplicationEvidence.js +26 -0
  14. package/dist/application/JavaScriptApplicationEvidenceGraph.js +89 -0
  15. package/dist/application/JavaScriptApplicationService.js +74 -0
  16. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +29 -0
  17. package/dist/application/JavaScriptApplicationWorkflowService.js +90 -0
  18. package/dist/application/JavaScriptArtifactAnalysis.js +7 -1
  19. package/dist/application/JavaScriptArtifactGraphBuilder.js +59 -16
  20. package/dist/application/JavaScriptArtifactGraphEvidence.js +24 -14
  21. package/dist/application/JavaScriptArtifactReconstruction.js +3 -0
  22. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -83
  23. package/dist/application/JavaScriptReplayPlanning.js +201 -0
  24. package/dist/application/JavaScriptReplayService.js +266 -0
  25. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +25 -0
  26. package/dist/application/JavaScriptRuntimeReconciliationService.js +27 -0
  27. package/dist/application/ManagedApplicationGraphService.js +55 -0
  28. package/dist/application/ManagedMemberComparisonService.js +122 -0
  29. package/dist/application/ManagedNativeVerificationService.js +39 -0
  30. package/dist/application/ManagedReconstructionService.js +58 -0
  31. package/dist/application/ManagedRuntimeCorrelationService.js +103 -0
  32. package/dist/application/PermissionAuthority.js +1 -1
  33. package/dist/application/ProcessSampling.js +15 -11
  34. package/dist/application/ProjectPermissionStore.js +1 -0
  35. package/dist/application/runtime.js +2 -0
  36. package/dist/browser/CdpCaptureEvents.js +49 -0
  37. package/dist/browser/CdpElectronInspection.js +106 -162
  38. package/dist/browser/CdpElectronProvider.js +5 -1
  39. package/dist/browser/CdpElectronScriptEvents.js +69 -0
  40. package/dist/browser/CdpElectronScripts.js +94 -0
  41. package/dist/browser/CdpElectronWorkers.js +56 -0
  42. package/dist/browser/CdpPageCapture.js +8 -4
  43. package/dist/catalogIdentity.js +4 -1
  44. package/dist/cli.js +388 -0
  45. package/dist/cliApplicationCommands.js +62 -0
  46. package/dist/cliCommandNames.js +13 -0
  47. package/dist/cliElectronCommands.js +103 -1
  48. package/dist/cliJsonInput.js +54 -0
  49. package/dist/config.js +83 -0
  50. package/dist/contracts/applicationToolContracts.js +91 -0
  51. package/dist/contracts/artifactToolContracts.js +5 -9
  52. package/dist/contracts/browserToolContracts.js +14 -62
  53. package/dist/contracts/electronToolContracts.js +45 -19
  54. package/dist/contracts/errorSchemas.js +1 -0
  55. package/dist/contracts/investigationExamples.js +0 -6
  56. package/dist/contracts/javascriptApplicationWorkflowExamples.js +46 -0
  57. package/dist/contracts/javascriptRuntimeReconciliationExample.js +208 -0
  58. package/dist/contracts/managedToolContracts.js +153 -0
  59. package/dist/contracts/managedWorkflowExamples.js +346 -0
  60. package/dist/contracts/managedWorkflowToolContracts.js +203 -0
  61. package/dist/contracts/nativeToolContracts.js +2 -6
  62. package/dist/contracts/promptContracts.js +18 -2
  63. package/dist/contracts/toolContractExamples.js +10 -25
  64. package/dist/contracts/toolContracts.js +47 -45
  65. package/dist/contracts/toolEffects.js +160 -0
  66. package/dist/contracts/toolOutputSchemas.js +46 -31
  67. package/dist/doctorRuntime.js +42 -1
  68. package/dist/domain/artifactComparison.js +3 -4
  69. package/dist/domain/browserObservation.js +3 -0
  70. package/dist/domain/bundleComparison.js +4 -4
  71. package/dist/domain/electronObservation.js +13 -0
  72. package/dist/domain/electronStaticAnalysis.js +9 -0
  73. package/dist/domain/electronStaticAnalysisBrowser.js +194 -0
  74. package/dist/domain/electronStaticAnalysisIpc.js +171 -0
  75. package/dist/domain/electronStaticAnalysisNative.js +164 -0
  76. package/dist/domain/electronStaticAnalysisTypes.js +1 -0
  77. package/dist/domain/electronStaticAnalysisValues.js +103 -0
  78. package/dist/domain/errors.js +67 -1
  79. package/dist/domain/functionComparisonSchemas.js +3 -8
  80. package/dist/domain/inputIssueProjection.js +52 -0
  81. package/dist/domain/javascriptApplicationAnalysis.js +155 -0
  82. package/dist/domain/javascriptApplicationChangeGraph.js +231 -0
  83. package/dist/domain/javascriptApplicationEvidenceSchemas.js +18 -0
  84. package/dist/domain/javascriptApplicationGraph.js +2 -1
  85. package/dist/domain/javascriptApplicationGraphSchemas.js +7 -0
  86. package/dist/domain/javascriptApplicationVersionComparison.js +116 -0
  87. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +139 -0
  88. package/dist/domain/javascriptApplicationVersionItems.js +221 -0
  89. package/dist/domain/javascriptApplicationVersionKeys.js +170 -0
  90. package/dist/domain/javascriptFeatureSeed.js +140 -0
  91. package/dist/domain/javascriptFeatureTrace.js +232 -0
  92. package/dist/domain/javascriptFeatureTraceSchemas.js +136 -0
  93. package/dist/domain/javascriptFeatureTraversal.js +88 -0
  94. package/dist/domain/javascriptNativeHandoff.js +85 -0
  95. package/dist/domain/javascriptReplay.js +361 -0
  96. package/dist/domain/javascriptRuntimeLoadState.js +106 -0
  97. package/dist/domain/javascriptRuntimeReconciliation.js +42 -0
  98. package/dist/domain/javascriptRuntimeReconciliationGraph.js +169 -0
  99. package/dist/domain/javascriptRuntimeReconciliationMatching.js +247 -0
  100. package/dist/domain/javascriptRuntimeReconciliationParsing.js +160 -0
  101. package/dist/domain/javascriptRuntimeReconciliationResult.js +119 -0
  102. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +316 -0
  103. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +245 -0
  104. package/dist/domain/javascriptRuntimeStaticCandidates.js +191 -0
  105. package/dist/domain/javascriptStaticAnalysis.js +31 -43
  106. package/dist/domain/javascriptStaticAnalysisFindings.js +39 -0
  107. package/dist/domain/javascriptStaticAnalysisHelpers.js +10 -0
  108. package/dist/domain/javascriptStaticAnalysisState.js +6 -0
  109. package/dist/domain/managedApplicationGraph.js +556 -0
  110. package/dist/domain/managedArtifact.js +444 -0
  111. package/dist/domain/managedMemberComparison.js +565 -0
  112. package/dist/domain/managedNativeVerification.js +408 -0
  113. package/dist/domain/managedReconstruction.js +183 -0
  114. package/dist/domain/managedRuntimeCorrelation.js +175 -0
  115. package/dist/domain/reconstructionVerificationSchemas.js +1 -3
  116. package/dist/dotnet/ManagedArtifactInspector.js +318 -0
  117. package/dist/dotnet/ManagedMemberInspector.js +887 -0
  118. package/dist/dotnet/ManagedMetadataHeaps.js +131 -0
  119. package/dist/dotnet/ManagedMetadataInventory.js +368 -0
  120. package/dist/dotnet/ManagedMetadataLayout.js +322 -0
  121. package/dist/dotnet/ManagedNativeBoundaryInspector.js +391 -0
  122. package/dist/dotnet/ManagedPeReader.js +157 -0
  123. package/dist/dotnet/ManagedReaderFailure.js +10 -0
  124. package/dist/dotnet/ManagedStaticProvider.js +203 -0
  125. package/dist/generatedPackageMetadata.js +2 -2
  126. package/dist/ghidra/GhidraProvider.js +6 -0
  127. package/dist/main.js +14 -0
  128. package/dist/replay/JavaScriptReplayWorker.js +286 -0
  129. package/dist/replay/LinuxJavaScriptReplayRunner.js +434 -0
  130. package/dist/replay/LinuxRuntimeClosure.js +46 -0
  131. package/dist/replay/LinuxSeccompPolicy.js +40 -0
  132. package/dist/replay/ReplayWorkerProtocol.js +55 -0
  133. package/dist/replay/SystemJavaScriptReplayHost.js +182 -0
  134. package/dist/server/createServer.js +52 -0
  135. package/dist/server/registerApplicationTools.js +115 -0
  136. package/dist/server/registerArtifactComparisonTool.js +16 -9
  137. package/dist/server/registerBrowserTools.js +33 -8
  138. package/dist/server/registerBundleComparisonTool.js +17 -20
  139. package/dist/server/registerElectronTools.js +45 -3
  140. package/dist/server/registerEnhancedTools.js +58 -13
  141. package/dist/server/registerEvidenceTools.js +5 -1
  142. package/dist/server/registerFunctionComparisonTool.js +14 -7
  143. package/dist/server/registerInvestigationTools.js +21 -17
  144. package/dist/server/registerManagedTools.js +6 -0
  145. package/dist/server/registerManagedWorkflowTools.js +277 -0
  146. package/dist/server/registerOfficialTools.js +8 -8
  147. package/dist/server/registerProcessComparisonTool.js +25 -47
  148. package/dist/server/registerSessionStatusTool.js +7 -7
  149. package/dist/server/registerSessionTools.js +51 -86
  150. package/dist/server/sessionEvidence.js +14 -19
  151. package/dist/server/toolInputValidation.js +77 -0
  152. package/dist/server/toolRegistrationOptions.js +79 -2
  153. package/dist/server/toolResult.js +25 -17
  154. package/package.json +12 -4
  155. package/scripts/rea.mjs +1 -1
  156. package/skills/rea-analysis/SKILL.md +59 -3
@@ -0,0 +1,444 @@
1
+ import { z } from "zod";
2
+ const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
3
+ const tokenSchema = z.string().regex(/^0x[0-9a-f]{8}$/u);
4
+ const offsetSchema = z.number().int().min(0);
5
+ const managedPage = (item) => z.object({
6
+ items: z.array(item),
7
+ offset: offsetSchema,
8
+ limit: z.number().int().min(1),
9
+ total: z.number().int().min(0),
10
+ returned: z.number().int().min(0),
11
+ dropped: z.number().int().min(0),
12
+ complete: z.boolean(),
13
+ });
14
+ const publicKeyIdentitySchema = z.object({
15
+ kind: z.enum(["none", "public-key", "public-key-token"]),
16
+ byte_length: z.number().int().min(0),
17
+ sha256: digestSchema.nullable(),
18
+ token: z
19
+ .string()
20
+ .regex(/^[a-f0-9]{16}$/u)
21
+ .nullable(),
22
+ });
23
+ const assemblyIdentitySchema = z.object({
24
+ name: z.string(),
25
+ version: z.string().regex(/^\d+\.\d+\.\d+\.\d+$/u),
26
+ culture: z.string().nullable(),
27
+ flags: z.number().int().min(0).max(0xffff_ffff),
28
+ hash_algorithm: z.number().int().min(0).max(0xffff_ffff),
29
+ public_key: publicKeyIdentitySchema,
30
+ token: tokenSchema,
31
+ row_offset: offsetSchema,
32
+ });
33
+ const moduleIdentitySchema = z.object({
34
+ name: z.string(),
35
+ generation: z.number().int().min(0).max(0xffff),
36
+ mvid: z.string().uuid().nullable(),
37
+ enc_id: z.string().uuid().nullable(),
38
+ enc_base_id: z.string().uuid().nullable(),
39
+ token: tokenSchema,
40
+ row_offset: offsetSchema,
41
+ });
42
+ const assemblyReferenceSchema = z.object({
43
+ name: z.string(),
44
+ version: z.string().regex(/^\d+\.\d+\.\d+\.\d+$/u),
45
+ culture: z.string().nullable(),
46
+ flags: z.number().int().min(0).max(0xffff_ffff),
47
+ public_key_or_token: publicKeyIdentitySchema,
48
+ hash_value_sha256: digestSchema.nullable(),
49
+ hash_value_length: z.number().int().min(0),
50
+ token: tokenSchema,
51
+ row_offset: offsetSchema,
52
+ });
53
+ const managedResourceSchema = z.object({
54
+ name: z.string(),
55
+ flags: z.number().int().min(0).max(0xffff_ffff),
56
+ visibility: z.enum(["public", "private", "unknown"]),
57
+ implementation_token: tokenSchema.nullable(),
58
+ embedded: z.boolean(),
59
+ declared_offset: z.number().int().min(0).max(0xffff_ffff),
60
+ data_length: z.number().int().min(0).nullable(),
61
+ data_sha256: digestSchema.nullable(),
62
+ token: tokenSchema,
63
+ row_offset: offsetSchema,
64
+ });
65
+ const customAttributeSchema = z.object({
66
+ parent_token: tokenSchema,
67
+ constructor_token: tokenSchema.nullable(),
68
+ type_name: z.string().nullable(),
69
+ value_length: z.number().int().min(0),
70
+ value_sha256: digestSchema,
71
+ decoded_fixed_string: z.string().nullable(),
72
+ token: tokenSchema,
73
+ row_offset: offsetSchema,
74
+ });
75
+ const managedSignatureSchema = z.object({
76
+ raw_length: z.number().int().min(0),
77
+ raw_sha256: digestSchema,
78
+ kind: z.enum(["method", "field", "unknown"]),
79
+ parse_status: z.enum(["decoded", "partial", "unsupported", "malformed"]),
80
+ calling_convention: z.string().nullable(),
81
+ generic_parameter_count: z.number().int().min(0).nullable(),
82
+ parameter_count: z.number().int().min(0).nullable(),
83
+ return_type: z.string().nullable(),
84
+ parameter_types: z.array(z.string()),
85
+ field_type: z.string().nullable(),
86
+ issue: z.string().nullable(),
87
+ });
88
+ const managedTypeSchema = z.object({
89
+ token: tokenSchema,
90
+ row_offset: offsetSchema,
91
+ namespace: z.string(),
92
+ name: z.string(),
93
+ full_name: z.string(),
94
+ flags: z.number().int().min(0).max(0xffff_ffff),
95
+ extends_token: tokenSchema.nullable(),
96
+ field_list: z.object({
97
+ first_row: z.number().int().min(1).nullable(),
98
+ last_row: z.number().int().min(0).nullable(),
99
+ count: z.number().int().min(0),
100
+ }),
101
+ method_list: z.object({
102
+ first_row: z.number().int().min(1).nullable(),
103
+ last_row: z.number().int().min(0).nullable(),
104
+ count: z.number().int().min(0),
105
+ }),
106
+ });
107
+ const managedFieldSchema = z.object({
108
+ token: tokenSchema,
109
+ row_offset: offsetSchema,
110
+ declaring_type_token: tokenSchema.nullable(),
111
+ declaring_type: z.string().nullable(),
112
+ name: z.string(),
113
+ flags: z.number().int().min(0).max(0xffff),
114
+ signature: managedSignatureSchema,
115
+ });
116
+ const managedExceptionRegionSchema = z.object({
117
+ flags: z.number().int().min(0).max(0xffff_ffff),
118
+ try_offset: z.number().int().min(0),
119
+ try_length: z.number().int().min(0),
120
+ handler_offset: z.number().int().min(0),
121
+ handler_length: z.number().int().min(0),
122
+ class_token: tokenSchema.nullable(),
123
+ filter_offset: z.number().int().min(0).nullable(),
124
+ });
125
+ const managedInstructionAnchorSchema = z.object({
126
+ il_offset: z.number().int().min(0),
127
+ opcode: z.string().min(1),
128
+ operand_kind: z.enum([
129
+ "none",
130
+ "branch",
131
+ "constant",
132
+ "field",
133
+ "method",
134
+ "signature",
135
+ "string",
136
+ "switch",
137
+ "token",
138
+ "type",
139
+ "variable",
140
+ "unknown",
141
+ ]),
142
+ operand: z.string().nullable(),
143
+ });
144
+ const managedMethodBodySchema = z.object({
145
+ status: z.enum(["present", "absent", "malformed", "too-large"]),
146
+ header_format: z.enum(["tiny", "fat", "none", "unknown"]),
147
+ rva: z.number().int().min(0).max(0xffff_ffff),
148
+ file_offset: offsetSchema.nullable(),
149
+ max_stack: z.number().int().min(0).nullable(),
150
+ init_locals: z.boolean().nullable(),
151
+ local_var_sig_token: tokenSchema.nullable(),
152
+ il_size: z.number().int().min(0),
153
+ il_sha256: digestSchema.nullable(),
154
+ normalized_il_sha256: digestSchema.nullable(),
155
+ instruction_count: z.number().int().min(0),
156
+ decoded_instruction_count: z.number().int().min(0),
157
+ truncated_instructions: z.number().int().min(0),
158
+ opcode_counts: z.record(z.string(), z.number().int().min(1)),
159
+ anchors: z.array(managedInstructionAnchorSchema),
160
+ exception_regions: z.array(managedExceptionRegionSchema),
161
+ issue: z.string().nullable(),
162
+ });
163
+ const managedMethodSchema = z.object({
164
+ token: tokenSchema,
165
+ row_offset: offsetSchema,
166
+ declaring_type_token: tokenSchema.nullable(),
167
+ declaring_type: z.string().nullable(),
168
+ name: z.string(),
169
+ rva: z.number().int().min(0).max(0xffff_ffff),
170
+ impl_flags: z.number().int().min(0).max(0xffff),
171
+ flags: z.number().int().min(0).max(0xffff),
172
+ signature: managedSignatureSchema,
173
+ body: managedMethodBodySchema,
174
+ });
175
+ const managedMemberReferenceSchema = z.object({
176
+ token: tokenSchema,
177
+ row_offset: offsetSchema,
178
+ parent_token: tokenSchema.nullable(),
179
+ name: z.string(),
180
+ signature: managedSignatureSchema,
181
+ });
182
+ const managedModuleReferenceSchema = z.object({
183
+ token: tokenSchema,
184
+ row_offset: offsetSchema,
185
+ name: z.string(),
186
+ });
187
+ const managedNativeImportSchema = z.object({
188
+ token: tokenSchema,
189
+ row_offset: offsetSchema,
190
+ mapping_flags: z.number().int().min(0).max(0xffff),
191
+ mapping_flags_hex: z.string().regex(/^0x[0-9a-f]{4}$/u),
192
+ member_token: tokenSchema.nullable(),
193
+ member_kind: z.enum(["method", "field", "unknown"]),
194
+ member_name: z.string().nullable(),
195
+ import_name: z.string(),
196
+ import_scope_token: tokenSchema.nullable(),
197
+ import_scope_name: z.string().nullable(),
198
+ no_mangle: z.boolean(),
199
+ char_set: z.enum(["not-specified", "ansi", "unicode", "auto", "unknown"]),
200
+ call_convention: z.enum([
201
+ "not-specified",
202
+ "winapi",
203
+ "cdecl",
204
+ "stdcall",
205
+ "thiscall",
206
+ "fastcall",
207
+ "unknown",
208
+ ]),
209
+ supports_last_error: z.boolean(),
210
+ best_fit: z.enum(["assembly-default", "enabled", "disabled", "unknown"]),
211
+ throw_on_unmappable_char: z.enum([
212
+ "assembly-default",
213
+ "enabled",
214
+ "disabled",
215
+ "unknown",
216
+ ]),
217
+ verification: z.literal("managed-declaration-only"),
218
+ });
219
+ const managedNativeImplementationSchema = z.object({
220
+ token: tokenSchema,
221
+ row_offset: offsetSchema,
222
+ name: z.string(),
223
+ rva: z.number().int().min(0).max(0xffff_ffff),
224
+ flags: z.number().int().min(0).max(0xffff),
225
+ impl_flags: z.number().int().min(0).max(0xffff),
226
+ code_type: z.enum(["il", "native", "optil", "runtime", "unknown"]),
227
+ managed_kind: z.enum(["managed", "unmanaged", "unknown"]),
228
+ pinvoke_declared: z.boolean(),
229
+ boundary_kind: z.enum([
230
+ "pinvoke",
231
+ "native-body",
232
+ "runtime-provided",
233
+ "unmanaged-method",
234
+ "mixed-or-unknown",
235
+ ]),
236
+ body_interpretation: z.enum([
237
+ "managed-cil",
238
+ "native-or-runtime",
239
+ "not-file-backed",
240
+ "unknown",
241
+ ]),
242
+ });
243
+ const managedCallEdgeSchema = z.object({
244
+ caller_token: tokenSchema,
245
+ caller: z.string().nullable(),
246
+ opcode: z.string(),
247
+ target_token: tokenSchema,
248
+ target_kind: z.enum(["method-def", "member-ref", "method-spec", "unknown"]),
249
+ target_name: z.string().nullable(),
250
+ });
251
+ const managedFieldAccessSchema = z.object({
252
+ method_token: tokenSchema,
253
+ method: z.string().nullable(),
254
+ opcode: z.string(),
255
+ field_token: tokenSchema,
256
+ field_name: z.string().nullable(),
257
+ });
258
+ const managedParseIssueSchema = z.object({
259
+ code: z.enum([
260
+ "invalid-cli-header",
261
+ "invalid-directory",
262
+ "invalid-metadata-root",
263
+ "invalid-stream",
264
+ "missing-stream",
265
+ "invalid-tables",
266
+ "invalid-row",
267
+ "invalid-heap-index",
268
+ "invalid-string",
269
+ "invalid-blob",
270
+ "invalid-guid",
271
+ "invalid-resource",
272
+ "limit-exceeded",
273
+ ]),
274
+ scope: z.string().min(1),
275
+ offset: offsetSchema.nullable(),
276
+ detail: z.string().min(1),
277
+ });
278
+ /** Provider-neutral, execution-free PE/CLI triage and identity result. */
279
+ export const managedArtifactInspectionSchema = z.object({
280
+ schema_version: z.literal(1),
281
+ artifact: z.object({
282
+ path: z.string().min(1),
283
+ sha256: digestSchema,
284
+ byte_length: z.number().int().min(0),
285
+ format: z.literal("pe"),
286
+ }),
287
+ pe: z.object({
288
+ machine: z.number().int().min(0).max(0xffff),
289
+ machine_hex: z.string().regex(/^0x[0-9a-f]{4}$/u),
290
+ architecture: z.enum(["x86", "x86_64", "arm", "arm64"]),
291
+ optional_header: z.enum(["pe32", "pe32-plus"]),
292
+ section_count: z.number().int().min(1).max(96),
293
+ characteristics: z.number().int().min(0).max(0xffff),
294
+ cli: z
295
+ .object({
296
+ header_offset: offsetSchema,
297
+ header_size: z.number().int().min(72),
298
+ runtime_version: z.string(),
299
+ flags: z.number().int().min(0).max(0xffff_ffff),
300
+ flag_names: z.array(z.string()),
301
+ entry_point: z.object({
302
+ kind: z.enum(["metadata-token", "native-rva", "none"]),
303
+ value: z.string().nullable(),
304
+ }),
305
+ metadata_rva: z.number().int().min(1).max(0xffff_ffff),
306
+ metadata_size: z.number().int().min(1).max(0xffff_ffff),
307
+ resources_rva: z.number().int().min(0).max(0xffff_ffff),
308
+ resources_size: z.number().int().min(0).max(0xffff_ffff),
309
+ strong_name_rva: z.number().int().min(0).max(0xffff_ffff),
310
+ strong_name_size: z.number().int().min(0).max(0xffff_ffff),
311
+ managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff),
312
+ managed_native_header_size: z.number().int().min(0).max(0xffff_ffff),
313
+ ready_to_run_signature: z.boolean(),
314
+ })
315
+ .nullable(),
316
+ }),
317
+ classification: z.object({
318
+ status: z.enum(["managed", "not-managed", "malformed"]),
319
+ container: z.literal("pe"),
320
+ runtime_family: z.enum([
321
+ "dotnet-framework",
322
+ "modern-dotnet",
323
+ "unity-mono",
324
+ "mixed-clr-native",
325
+ "unknown",
326
+ ]),
327
+ implementation: z.enum([
328
+ "cil",
329
+ "cil-and-ready-to-run",
330
+ "cpp-cli-mixed",
331
+ "metadata-only",
332
+ "not-managed",
333
+ "unknown",
334
+ ]),
335
+ managed_architecture: z.enum([
336
+ "anycpu",
337
+ "anycpu-prefer-32",
338
+ "x86",
339
+ "x86_64",
340
+ "arm",
341
+ "arm64",
342
+ "unknown",
343
+ ]),
344
+ evidence: z.array(z.object({
345
+ code: z.string().min(1),
346
+ detail: z.string().min(1),
347
+ file_offset: offsetSchema.nullable(),
348
+ })),
349
+ }),
350
+ metadata: z.object({
351
+ status: z.enum(["absent", "complete", "partial", "malformed"]),
352
+ version: z.string().nullable(),
353
+ stream_names: z.array(z.string()),
354
+ table_row_counts: z.record(z.string(), z.number().int().min(0).max(0xffff_ffff)),
355
+ }),
356
+ module: moduleIdentitySchema.nullable(),
357
+ assembly: assemblyIdentitySchema.nullable(),
358
+ target_frameworks: z.array(z.string()),
359
+ references: managedPage(assemblyReferenceSchema),
360
+ resources: managedPage(managedResourceSchema),
361
+ attributes: managedPage(customAttributeSchema),
362
+ coverage: z.object({
363
+ state: z.enum(["complete", "partial", "unavailable"]),
364
+ issues: z.array(managedParseIssueSchema),
365
+ }),
366
+ limitations: z.array(z.string()),
367
+ });
368
+ /** Provider-neutral, execution-free metadata/signature/IL member inspection. */
369
+ export const managedMemberInspectionSchema = z.object({
370
+ schema_version: z.literal(1),
371
+ artifact: z.object({
372
+ path: z.string().min(1),
373
+ sha256: digestSchema,
374
+ byte_length: z.number().int().min(0),
375
+ format: z.literal("pe"),
376
+ }),
377
+ module: moduleIdentitySchema.nullable(),
378
+ metadata: z.object({
379
+ status: z.enum(["absent", "complete", "partial", "malformed"]),
380
+ version: z.string().nullable(),
381
+ table_row_counts: z.record(z.string(), z.number().int().min(0).max(0xffff_ffff)),
382
+ }),
383
+ identity_scope: z.object({
384
+ token_identity: z.literal("build-local"),
385
+ requires_artifact_sha256: digestSchema,
386
+ requires_mvid: z.string().uuid().nullable(),
387
+ }),
388
+ types: managedPage(managedTypeSchema),
389
+ fields: managedPage(managedFieldSchema),
390
+ methods: managedPage(managedMethodSchema),
391
+ member_refs: managedPage(managedMemberReferenceSchema),
392
+ call_edges: managedPage(managedCallEdgeSchema),
393
+ field_accesses: managedPage(managedFieldAccessSchema),
394
+ coverage: z.object({
395
+ state: z.enum(["complete", "partial", "unavailable"]),
396
+ issues: z.array(managedParseIssueSchema),
397
+ }),
398
+ limitations: z.array(z.string()),
399
+ });
400
+ /** Provider-neutral managed/native boundary observations from PE/CLI metadata. */
401
+ export const managedNativeBoundaryInspectionSchema = z.object({
402
+ schema_version: z.literal(1),
403
+ artifact: z.object({
404
+ path: z.string().min(1),
405
+ sha256: digestSchema,
406
+ byte_length: z.number().int().min(0),
407
+ format: z.literal("pe"),
408
+ }),
409
+ module: moduleIdentitySchema.nullable(),
410
+ metadata: z.object({
411
+ status: z.enum(["absent", "complete", "partial", "malformed"]),
412
+ version: z.string().nullable(),
413
+ table_row_counts: z.record(z.string(), z.number().int().min(0).max(0xffff_ffff)),
414
+ }),
415
+ identity_scope: z.object({
416
+ token_identity: z.literal("build-local"),
417
+ requires_artifact_sha256: digestSchema,
418
+ requires_mvid: z.string().uuid().nullable(),
419
+ }),
420
+ cli_native: z.object({
421
+ il_only: z.boolean(),
422
+ requires_32bit: z.boolean(),
423
+ strong_name_signed: z.boolean(),
424
+ native_entry_point: z.boolean(),
425
+ ready_to_run_signature: z.boolean(),
426
+ managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff),
427
+ managed_native_header_size: z.number().int().min(0).max(0xffff_ffff),
428
+ }),
429
+ module_refs: managedPage(managedModuleReferenceSchema),
430
+ pinvoke_imports: managedPage(managedNativeImportSchema),
431
+ native_implementations: managedPage(managedNativeImplementationSchema),
432
+ summary: z.object({
433
+ module_ref_count: z.number().int().min(0),
434
+ pinvoke_import_count: z.number().int().min(0),
435
+ native_implementation_count: z.number().int().min(0),
436
+ ready_to_run: z.boolean(),
437
+ mixed_mode_or_native_header: z.boolean(),
438
+ }),
439
+ coverage: z.object({
440
+ state: z.enum(["complete", "partial", "unavailable"]),
441
+ issues: z.array(managedParseIssueSchema),
442
+ }),
443
+ limitations: z.array(z.string()),
444
+ });