windows-exe-decompiler-mcp-server 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE_INSTALLATION.md +129 -0
- package/CODEX_INSTALLATION.md +25 -1
- package/COPILOT_INSTALLATION.md +29 -1
- package/LICENSE +21 -21
- package/README.md +232 -110
- package/dist/analysis-provenance.d.ts +50 -2
- package/dist/analysis-provenance.js +1 -0
- package/dist/analysis-task-runner.js +92 -0
- package/dist/config.d.ts +35 -16
- package/dist/config.js +37 -3
- package/dist/database.js +115 -115
- package/dist/decompiler-worker.d.ts +10 -5
- package/dist/decompiler-worker.js +240 -58
- package/dist/dynamic-trace.d.ts +6 -0
- package/dist/dynamic-trace.js +52 -1
- package/dist/ghidra-config.js +17 -1
- package/dist/index.js +38 -8
- package/dist/pe-runtime-functions.d.ts +90 -0
- package/dist/pe-runtime-functions.js +452 -0
- package/dist/prompts/module-reconstruction-review.d.ts +5 -0
- package/dist/prompts/module-reconstruction-review.js +65 -0
- package/dist/runtime-correlation.d.ts +5 -0
- package/dist/runtime-correlation.js +179 -2
- package/dist/sample-workspace.d.ts +28 -0
- package/dist/sample-workspace.js +186 -0
- package/dist/semantic-name-suggestion-artifacts.d.ts +56 -0
- package/dist/semantic-name-suggestion-artifacts.js +87 -0
- package/dist/server.js +1 -1
- package/dist/setup-guidance.d.ts +73 -0
- package/dist/setup-guidance.js +211 -0
- package/dist/tools/artifact-read.d.ts +10 -10
- package/dist/tools/artifacts-diff.d.ts +8 -8
- package/dist/tools/artifacts-list.d.ts +16 -16
- package/dist/tools/attack-map.d.ts +8 -8
- package/dist/tools/binary-role-profile.d.ts +1197 -0
- package/dist/tools/binary-role-profile.js +575 -0
- package/dist/tools/code-function-explain-apply.d.ts +12 -12
- package/dist/tools/code-function-explain-prepare.d.ts +12 -12
- package/dist/tools/code-function-explain-review.d.ts +58 -58
- package/dist/tools/code-function-rename-apply.d.ts +12 -12
- package/dist/tools/code-function-rename-prepare.d.ts +14 -14
- package/dist/tools/code-function-rename-review.d.ts +66 -66
- package/dist/tools/code-functions-define.d.ts +337 -0
- package/dist/tools/code-functions-define.js +337 -0
- package/dist/tools/code-functions-list.js +1 -1
- package/dist/tools/code-functions-rank.js +1 -1
- package/dist/tools/code-functions-reconstruct.d.ts +368 -58
- package/dist/tools/code-functions-reconstruct.js +130 -10
- package/dist/tools/code-functions-smart-recover.d.ts +352 -0
- package/dist/tools/code-functions-smart-recover.js +190 -0
- package/dist/tools/code-module-review-apply.d.ts +233 -0
- package/dist/tools/code-module-review-apply.js +209 -0
- package/dist/tools/code-module-review-prepare.d.ts +756 -0
- package/dist/tools/code-module-review-prepare.js +343 -0
- package/dist/tools/code-module-review.d.ts +474 -0
- package/dist/tools/code-module-review.js +566 -0
- package/dist/tools/code-reconstruct-export.d.ts +193 -21
- package/dist/tools/code-reconstruct-export.js +578 -21
- package/dist/tools/code-reconstruct-plan.d.ts +20 -20
- package/dist/tools/com-role-profile.d.ts +353 -0
- package/dist/tools/com-role-profile.js +186 -0
- package/dist/tools/dll-export-profile.d.ts +625 -0
- package/dist/tools/dll-export-profile.js +230 -0
- package/dist/tools/dotnet-metadata-extract.d.ts +122 -122
- package/dist/tools/dotnet-reconstruct-export.d.ts +49 -49
- package/dist/tools/dotnet-types-list.d.ts +66 -66
- package/dist/tools/dynamic-dependencies.d.ts +144 -8
- package/dist/tools/dynamic-dependencies.js +20 -1
- package/dist/tools/dynamic-memory-import.js +105 -2
- package/dist/tools/ghidra-analyze.d.ts +20 -0
- package/dist/tools/ghidra-analyze.js +10 -2
- package/dist/tools/ghidra-health.d.ts +177 -0
- package/dist/tools/ghidra-health.js +28 -0
- package/dist/tools/ioc-export.d.ts +8 -8
- package/dist/tools/packer-detect.d.ts +14 -14
- package/dist/tools/packer-detect.js +6 -9
- package/dist/tools/pe-exports-extract.d.ts +8 -8
- package/dist/tools/pe-exports-extract.js +6 -9
- package/dist/tools/pe-fingerprint.d.ts +36 -36
- package/dist/tools/pe-imports-extract.d.ts +8 -8
- package/dist/tools/pe-imports-extract.js +6 -9
- package/dist/tools/pe-pdata-extract.d.ts +448 -0
- package/dist/tools/pe-pdata-extract.js +219 -0
- package/dist/tools/pe-symbols-recover.d.ts +227 -0
- package/dist/tools/pe-symbols-recover.js +316 -0
- package/dist/tools/report-generate.d.ts +15 -1
- package/dist/tools/report-generate.js +139 -16
- package/dist/tools/report-summarize.d.ts +2242 -8
- package/dist/tools/report-summarize.js +246 -10
- package/dist/tools/runtime-detect.d.ts +8 -8
- package/dist/tools/runtime-detect.js +2 -12
- package/dist/tools/rust-binary-analyze.d.ts +2047 -0
- package/dist/tools/rust-binary-analyze.js +443 -0
- package/dist/tools/sample-profile-get.d.ts +135 -16
- package/dist/tools/sample-profile-get.js +35 -32
- package/dist/tools/sandbox-execute.d.ts +10 -10
- package/dist/tools/strings-extract.d.ts +8 -8
- package/dist/tools/strings-extract.js +2 -12
- package/dist/tools/strings-floss-decode.d.ts +8 -8
- package/dist/tools/system-health.d.ts +172 -36
- package/dist/tools/system-health.js +14 -0
- package/dist/tools/system-setup-guide.d.ts +179 -0
- package/dist/tools/system-setup-guide.js +62 -0
- package/dist/tools/tool-help.d.ts +16 -16
- package/dist/tools/tool-help.js +172 -0
- package/dist/tools/yara-scan.d.ts +8 -8
- package/dist/types.d.ts +2 -0
- package/dist/workflows/function-explanation-review.d.ts +3034 -76
- package/dist/workflows/function-explanation-review.js +172 -42
- package/dist/workflows/function-index-recover.d.ts +333 -0
- package/dist/workflows/function-index-recover.js +291 -0
- package/dist/workflows/module-reconstruction-review.d.ts +3537 -0
- package/dist/workflows/module-reconstruction-review.js +354 -0
- package/dist/workflows/reconstruct.d.ts +2182 -223
- package/dist/workflows/reconstruct.js +575 -32
- package/dist/workflows/semantic-name-review.d.ts +1436 -85
- package/dist/workflows/semantic-name-review.js +150 -58
- package/dist/workflows/triage.d.ts +8 -8
- package/ghidra_scripts/DecompileFunction.java +487 -487
- package/ghidra_scripts/ExtractCFG.java +256 -256
- package/ghidra_scripts/ExtractFunctions.java +442 -442
- package/ghidra_scripts/README.md +112 -112
- package/ghidra_scripts/SearchFunctionReferences.java +380 -380
- package/helpers/DotNetMetadataProbe/DotNetMetadataProbe.csproj +9 -9
- package/helpers/DotNetMetadataProbe/Program.cs +566 -566
- package/install-to-claude.ps1 +432 -0
- package/install-to-codex.ps1 +256 -178
- package/install-to-copilot.ps1 +389 -303
- package/package.json +4 -2
- package/requirements.txt +9 -9
- package/workers/requirements-dynamic.txt +11 -11
- package/workers/requirements.txt +8 -8
- package/workers/speakeasy_compat.py +175 -175
- package/workers/static_worker.py +3474 -3474
|
@@ -7,6 +7,8 @@ import { createCodeFunctionRenameReviewHandler } from '../tools/code-function-re
|
|
|
7
7
|
import { createReconstructWorkflowHandler } from './reconstruct.js';
|
|
8
8
|
import { AnalysisProvenanceSchema } from '../analysis-provenance.js';
|
|
9
9
|
import { AnalysisSelectionDiffSchema } from '../selection-diff.js';
|
|
10
|
+
import { BinaryRoleProfileDataSchema } from '../tools/binary-role-profile.js';
|
|
11
|
+
import { RequiredUserInputSchema, SetupActionSchema, collectSetupGuidanceFromWorkerResult, mergeRequiredUserInputs, mergeSetupActions, } from '../setup-guidance.js';
|
|
10
12
|
const TOOL_NAME = 'workflow.semantic_name_review';
|
|
11
13
|
export const semanticNameReviewWorkflowInputSchema = z
|
|
12
14
|
.object({
|
|
@@ -157,6 +159,14 @@ export const semanticNameReviewWorkflowInputSchema = z
|
|
|
157
159
|
.max(64)
|
|
158
160
|
.optional()
|
|
159
161
|
.describe('Optional export folder name used for the refresh run'),
|
|
162
|
+
include_preflight: z
|
|
163
|
+
.boolean()
|
|
164
|
+
.default(true)
|
|
165
|
+
.describe('Run binary role and language-specific preflight profiling before refresh export'),
|
|
166
|
+
auto_recover_function_index: z
|
|
167
|
+
.boolean()
|
|
168
|
+
.default(true)
|
|
169
|
+
.describe('When native function-index coverage is missing, automatically recover it before refresh export'),
|
|
160
170
|
include_plan: z
|
|
161
171
|
.boolean()
|
|
162
172
|
.default(false)
|
|
@@ -225,70 +235,88 @@ export const semanticNameReviewWorkflowInputSchema = z
|
|
|
225
235
|
export const semanticNameReviewWorkflowOutputSchema = z.object({
|
|
226
236
|
ok: z.boolean(),
|
|
227
237
|
data: z
|
|
228
|
-
.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
238
|
+
.union([
|
|
239
|
+
z.object({
|
|
240
|
+
job_id: z.string(),
|
|
241
|
+
status: z.literal('queued'),
|
|
242
|
+
tool: z.literal(TOOL_NAME),
|
|
243
|
+
sample_id: z.string(),
|
|
244
|
+
progress: z.number().int().min(0).max(100),
|
|
245
|
+
}),
|
|
246
|
+
z.object({
|
|
247
|
+
sample_id: z.string(),
|
|
248
|
+
review: z.object({
|
|
249
|
+
review_status: z.string(),
|
|
250
|
+
prompt_name: z.string(),
|
|
251
|
+
client: z.object({
|
|
252
|
+
name: z.string().nullable(),
|
|
253
|
+
version: z.string().nullable(),
|
|
254
|
+
sampling_available: z.boolean(),
|
|
255
|
+
}),
|
|
256
|
+
prepare: z.object({
|
|
257
|
+
prepared_count: z.number().int().nonnegative(),
|
|
258
|
+
unresolved_count: z.number().int().nonnegative(),
|
|
259
|
+
include_resolved: z.boolean(),
|
|
260
|
+
artifact_id: z.string().nullable(),
|
|
261
|
+
}),
|
|
262
|
+
sampling: z.object({
|
|
263
|
+
attempted: z.boolean(),
|
|
264
|
+
model: z.string().nullable(),
|
|
265
|
+
stop_reason: z.string().nullable(),
|
|
266
|
+
parsed_suggestion_count: z.number().int().nonnegative(),
|
|
267
|
+
}),
|
|
268
|
+
apply: z.object({
|
|
269
|
+
attempted: z.boolean(),
|
|
270
|
+
accepted_count: z.number().int().nonnegative(),
|
|
271
|
+
rejected_count: z.number().int().nonnegative(),
|
|
272
|
+
artifact_id: z.string().nullable(),
|
|
273
|
+
}),
|
|
274
|
+
confidence_policy: z.object({
|
|
275
|
+
calibrated: z.boolean(),
|
|
276
|
+
rule_priority_over_llm: z.boolean(),
|
|
277
|
+
llm_acceptance_threshold: z.number().min(0).max(1),
|
|
278
|
+
meaning: z.string(),
|
|
279
|
+
}),
|
|
280
|
+
reconstruct: z.object({
|
|
281
|
+
attempted: z.boolean(),
|
|
282
|
+
reconstructed_count: z.number().int().nonnegative(),
|
|
283
|
+
llm_or_hybrid_count: z.number().int().nonnegative(),
|
|
284
|
+
functions: z.array(z.object({
|
|
285
|
+
function: z.string(),
|
|
286
|
+
address: z.string(),
|
|
287
|
+
validated_name: z.string().nullable(),
|
|
288
|
+
resolution_source: z.string().nullable(),
|
|
289
|
+
})),
|
|
290
|
+
}),
|
|
261
291
|
}),
|
|
262
|
-
|
|
292
|
+
export: z.object({
|
|
263
293
|
attempted: z.boolean(),
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
294
|
+
status: z.enum(['completed', 'failed', 'skipped']),
|
|
295
|
+
selected_path: z.enum(['native', 'dotnet']).nullable(),
|
|
296
|
+
export_tool: z.string().nullable(),
|
|
297
|
+
export_root: z.string().nullable(),
|
|
298
|
+
manifest_path: z.string().nullable(),
|
|
299
|
+
build_validation_status: z.string().nullable(),
|
|
300
|
+
harness_validation_status: z.string().nullable(),
|
|
301
|
+
preflight: z
|
|
302
|
+
.object({
|
|
303
|
+
binary_profile: BinaryRoleProfileDataSchema.nullable(),
|
|
304
|
+
rust_profile: z.any().nullable(),
|
|
305
|
+
function_index_recovery: z.any().nullable(),
|
|
306
|
+
})
|
|
307
|
+
.nullable(),
|
|
308
|
+
provenance: AnalysisProvenanceSchema.nullable(),
|
|
309
|
+
selection_diffs: AnalysisSelectionDiffSchema.nullable(),
|
|
310
|
+
notes: z.array(z.string()),
|
|
272
311
|
}),
|
|
312
|
+
next_steps: z.array(z.string()),
|
|
273
313
|
}),
|
|
274
|
-
|
|
275
|
-
attempted: z.boolean(),
|
|
276
|
-
status: z.enum(['completed', 'failed', 'skipped']),
|
|
277
|
-
selected_path: z.enum(['native', 'dotnet']).nullable(),
|
|
278
|
-
export_tool: z.string().nullable(),
|
|
279
|
-
export_root: z.string().nullable(),
|
|
280
|
-
manifest_path: z.string().nullable(),
|
|
281
|
-
build_validation_status: z.string().nullable(),
|
|
282
|
-
harness_validation_status: z.string().nullable(),
|
|
283
|
-
provenance: AnalysisProvenanceSchema.nullable(),
|
|
284
|
-
selection_diffs: AnalysisSelectionDiffSchema.nullable(),
|
|
285
|
-
notes: z.array(z.string()),
|
|
286
|
-
}),
|
|
287
|
-
next_steps: z.array(z.string()),
|
|
288
|
-
})
|
|
314
|
+
])
|
|
289
315
|
.optional(),
|
|
290
316
|
warnings: z.array(z.string()).optional(),
|
|
291
317
|
errors: z.array(z.string()).optional(),
|
|
318
|
+
setup_actions: z.array(SetupActionSchema).optional(),
|
|
319
|
+
required_user_inputs: z.array(RequiredUserInputSchema).optional(),
|
|
292
320
|
artifacts: z.array(z.any()).optional(),
|
|
293
321
|
metrics: z
|
|
294
322
|
.object({
|
|
@@ -303,7 +331,7 @@ export const semanticNameReviewWorkflowToolDefinition = {
|
|
|
303
331
|
inputSchema: semanticNameReviewWorkflowInputSchema,
|
|
304
332
|
outputSchema: semanticNameReviewWorkflowOutputSchema,
|
|
305
333
|
};
|
|
306
|
-
export function createSemanticNameReviewWorkflowHandler(workspaceManager, database, cacheManager, mcpServer, dependencies) {
|
|
334
|
+
export function createSemanticNameReviewWorkflowHandler(workspaceManager, database, cacheManager, mcpServer, dependencies, jobQueue) {
|
|
307
335
|
const renameReviewHandler = dependencies?.renameReviewHandler ||
|
|
308
336
|
createCodeFunctionRenameReviewHandler(workspaceManager, database, cacheManager, mcpServer);
|
|
309
337
|
const reconstructWorkflowHandler = dependencies?.reconstructWorkflowHandler ||
|
|
@@ -313,8 +341,51 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
313
341
|
const warnings = [];
|
|
314
342
|
const errors = [];
|
|
315
343
|
const artifacts = [];
|
|
344
|
+
let setupActions = [];
|
|
345
|
+
let requiredUserInputs = [];
|
|
316
346
|
try {
|
|
317
347
|
const input = semanticNameReviewWorkflowInputSchema.parse(args);
|
|
348
|
+
const sample = database.findSample(input.sample_id);
|
|
349
|
+
if (!sample) {
|
|
350
|
+
return {
|
|
351
|
+
ok: false,
|
|
352
|
+
errors: [`Sample not found: ${input.sample_id}`],
|
|
353
|
+
metrics: {
|
|
354
|
+
elapsed_ms: Date.now() - startTime,
|
|
355
|
+
tool: TOOL_NAME,
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
if (jobQueue) {
|
|
360
|
+
const jobTimeoutMs = Math.max(input.build_timeout_ms + input.run_timeout_ms + 45 * 60 * 1000, 60 * 60 * 1000);
|
|
361
|
+
const jobId = jobQueue.enqueue({
|
|
362
|
+
type: 'static',
|
|
363
|
+
tool: TOOL_NAME,
|
|
364
|
+
sampleId: input.sample_id,
|
|
365
|
+
args: input,
|
|
366
|
+
priority: 5,
|
|
367
|
+
timeout: jobTimeoutMs,
|
|
368
|
+
retryPolicy: {
|
|
369
|
+
maxRetries: 1,
|
|
370
|
+
backoffMs: 5000,
|
|
371
|
+
retryableErrors: ['E_TIMEOUT', 'E_RESOURCE_EXHAUSTED'],
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
return {
|
|
375
|
+
ok: true,
|
|
376
|
+
data: {
|
|
377
|
+
job_id: jobId,
|
|
378
|
+
status: 'queued',
|
|
379
|
+
tool: TOOL_NAME,
|
|
380
|
+
sample_id: input.sample_id,
|
|
381
|
+
progress: 0,
|
|
382
|
+
},
|
|
383
|
+
metrics: {
|
|
384
|
+
elapsed_ms: Date.now() - startTime,
|
|
385
|
+
tool: TOOL_NAME,
|
|
386
|
+
},
|
|
387
|
+
};
|
|
388
|
+
}
|
|
318
389
|
const reviewResult = await renameReviewHandler({
|
|
319
390
|
sample_id: input.sample_id,
|
|
320
391
|
address: input.address,
|
|
@@ -343,11 +414,18 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
343
414
|
});
|
|
344
415
|
warnings.push(...(reviewResult.warnings || []));
|
|
345
416
|
artifacts.push(...(reviewResult.artifacts || []));
|
|
417
|
+
{
|
|
418
|
+
const setupGuidance = collectSetupGuidanceFromWorkerResult(reviewResult);
|
|
419
|
+
setupActions = mergeSetupActions(setupActions, setupGuidance.setupActions);
|
|
420
|
+
requiredUserInputs = mergeRequiredUserInputs(requiredUserInputs, setupGuidance.requiredUserInputs);
|
|
421
|
+
}
|
|
346
422
|
if (!reviewResult.ok) {
|
|
347
423
|
return {
|
|
348
424
|
ok: false,
|
|
349
425
|
errors: reviewResult.errors || ['code.function.rename.review failed'],
|
|
350
426
|
warnings: warnings.length > 0 ? warnings : undefined,
|
|
427
|
+
setup_actions: setupActions.length > 0 ? setupActions : undefined,
|
|
428
|
+
required_user_inputs: requiredUserInputs.length > 0 ? requiredUserInputs : undefined,
|
|
351
429
|
artifacts: artifacts.length > 0 ? artifacts : undefined,
|
|
352
430
|
metrics: {
|
|
353
431
|
elapsed_ms: Date.now() - startTime,
|
|
@@ -370,6 +448,7 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
370
448
|
manifest_path: null,
|
|
371
449
|
build_validation_status: null,
|
|
372
450
|
harness_validation_status: null,
|
|
451
|
+
preflight: null,
|
|
373
452
|
provenance: null,
|
|
374
453
|
selection_diffs: null,
|
|
375
454
|
notes: [],
|
|
@@ -393,6 +472,8 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
393
472
|
semantic_session_tag: input.semantic_session_tag || input.session_tag,
|
|
394
473
|
compare_semantic_scope: input.compare_semantic_scope,
|
|
395
474
|
compare_semantic_session_tag: input.compare_semantic_session_tag,
|
|
475
|
+
include_preflight: input.include_preflight,
|
|
476
|
+
auto_recover_function_index: input.auto_recover_function_index,
|
|
396
477
|
include_plan: input.include_plan,
|
|
397
478
|
include_obfuscation_fallback: input.include_obfuscation_fallback,
|
|
398
479
|
fallback_on_error: input.fallback_on_error,
|
|
@@ -401,6 +482,11 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
401
482
|
});
|
|
402
483
|
warnings.push(...(exportResult.warnings || []));
|
|
403
484
|
artifacts.push(...(exportResult.artifacts || []));
|
|
485
|
+
{
|
|
486
|
+
const setupGuidance = collectSetupGuidanceFromWorkerResult(exportResult);
|
|
487
|
+
setupActions = mergeSetupActions(setupActions, setupGuidance.setupActions);
|
|
488
|
+
requiredUserInputs = mergeRequiredUserInputs(requiredUserInputs, setupGuidance.requiredUserInputs);
|
|
489
|
+
}
|
|
404
490
|
if (!exportResult.ok) {
|
|
405
491
|
errors.push(...(exportResult.errors || ['workflow.reconstruct failed during export refresh']));
|
|
406
492
|
exportSummary = {
|
|
@@ -412,6 +498,7 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
412
498
|
manifest_path: null,
|
|
413
499
|
build_validation_status: null,
|
|
414
500
|
harness_validation_status: null,
|
|
501
|
+
preflight: null,
|
|
415
502
|
provenance: null,
|
|
416
503
|
selection_diffs: null,
|
|
417
504
|
notes: ['Refresh export failed after semantic name apply.'],
|
|
@@ -428,6 +515,7 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
428
515
|
manifest_path: exportData.export?.manifest_path || null,
|
|
429
516
|
build_validation_status: exportData.export?.build_validation_status || null,
|
|
430
517
|
harness_validation_status: exportData.export?.harness_validation_status || null,
|
|
518
|
+
preflight: exportData.preflight || null,
|
|
431
519
|
provenance: exportData.provenance || null,
|
|
432
520
|
selection_diffs: exportData.selection_diffs || null,
|
|
433
521
|
notes: Array.isArray(exportData.notes) ? exportData.notes : [],
|
|
@@ -499,6 +587,8 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
499
587
|
},
|
|
500
588
|
warnings: warnings.length > 0 ? warnings : undefined,
|
|
501
589
|
errors: errors.length > 0 ? errors : undefined,
|
|
590
|
+
setup_actions: setupActions.length > 0 ? setupActions : undefined,
|
|
591
|
+
required_user_inputs: requiredUserInputs.length > 0 ? requiredUserInputs : undefined,
|
|
502
592
|
artifacts: artifacts.length > 0 ? artifacts : undefined,
|
|
503
593
|
metrics: {
|
|
504
594
|
elapsed_ms: Date.now() - startTime,
|
|
@@ -510,6 +600,8 @@ export function createSemanticNameReviewWorkflowHandler(workspaceManager, databa
|
|
|
510
600
|
return {
|
|
511
601
|
ok: false,
|
|
512
602
|
errors: [error instanceof Error ? error.message : String(error)],
|
|
603
|
+
setup_actions: setupActions.length > 0 ? setupActions : undefined,
|
|
604
|
+
required_user_inputs: requiredUserInputs.length > 0 ? requiredUserInputs : undefined,
|
|
513
605
|
metrics: {
|
|
514
606
|
elapsed_ms: Date.now() - startTime,
|
|
515
607
|
tool: TOOL_NAME,
|
|
@@ -446,10 +446,6 @@ export declare const TriageWorkflowOutputSchema: z.ZodObject<{
|
|
|
446
446
|
}>>;
|
|
447
447
|
}, "strip", z.ZodTypeAny, {
|
|
448
448
|
ok: boolean;
|
|
449
|
-
metrics?: {
|
|
450
|
-
elapsed_ms: number;
|
|
451
|
-
tool: string;
|
|
452
|
-
} | undefined;
|
|
453
449
|
data?: {
|
|
454
450
|
summary: string;
|
|
455
451
|
confidence: number;
|
|
@@ -519,14 +515,14 @@ export declare const TriageWorkflowOutputSchema: z.ZodObject<{
|
|
|
519
515
|
} | undefined;
|
|
520
516
|
} | undefined;
|
|
521
517
|
} | undefined;
|
|
522
|
-
warnings?: string[] | undefined;
|
|
523
|
-
errors?: string[] | undefined;
|
|
524
|
-
}, {
|
|
525
|
-
ok: boolean;
|
|
526
518
|
metrics?: {
|
|
527
519
|
elapsed_ms: number;
|
|
528
520
|
tool: string;
|
|
529
521
|
} | undefined;
|
|
522
|
+
warnings?: string[] | undefined;
|
|
523
|
+
errors?: string[] | undefined;
|
|
524
|
+
}, {
|
|
525
|
+
ok: boolean;
|
|
530
526
|
data?: {
|
|
531
527
|
summary: string;
|
|
532
528
|
confidence: number;
|
|
@@ -596,6 +592,10 @@ export declare const TriageWorkflowOutputSchema: z.ZodObject<{
|
|
|
596
592
|
} | undefined;
|
|
597
593
|
} | undefined;
|
|
598
594
|
} | undefined;
|
|
595
|
+
metrics?: {
|
|
596
|
+
elapsed_ms: number;
|
|
597
|
+
tool: string;
|
|
598
|
+
} | undefined;
|
|
599
599
|
warnings?: string[] | undefined;
|
|
600
600
|
errors?: string[] | undefined;
|
|
601
601
|
}>;
|