()
| 20 | } |
| 21 | |
| 22 | function main() { |
| 23 | var args = process.argv.slice(2); |
| 24 | var inputPath = ''; |
| 25 | for (var i = 0; i < args.length; i++) { |
| 26 | if (args[i] && !args[i].startsWith('--')) { inputPath = args[i]; break; } |
| 27 | } |
| 28 | var source = process.env.A2A_SOURCE || 'external'; |
| 29 | var factor = Number.isFinite(Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR)) |
| 30 | ? Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR) : 0.6; |
| 31 | |
| 32 | var text = inputPath ? a2a.readTextIfExists(inputPath) : readStdin(); |
| 33 | var parsed = a2a.parseA2AInput(text); |
| 34 | var signals = parseSignalsFromEnv(); |
| 35 | |
| 36 | var accepted = 0; |
| 37 | var rejected = 0; |
| 38 | var emitDecisions = process.env.A2A_EMIT_DECISIONS === 'true'; |
| 39 | |
| 40 | for (var j = 0; j < parsed.length; j++) { |
| 41 | var obj = parsed[j]; |
| 42 | if (!a2a.isAllowedA2AAsset(obj)) continue; |
| 43 | |
| 44 | if (obj.asset_id && typeof obj.asset_id === 'string') { |
| 45 | if (!contentHash.verifyAssetId(obj)) { |
| 46 | rejected += 1; |
| 47 | if (emitDecisions) { |
| 48 | try { |
| 49 | var dm = a2aProto.buildDecision({ assetId: obj.asset_id, localId: obj.id, decision: 'reject', reason: 'asset_id integrity check failed' }); |
| 50 | a2aProto.getTransport().send(dm); |
| 51 | } catch (e) {} |
| 52 | } |
| 53 | continue; |
| 54 | } |
| 55 | } |
| 56 | |
| 57 | var staged = a2a.lowerConfidence(obj, { source: source, factor: factor }); |
| 58 | if (!staged) continue; |
| 59 | |
| 60 | assetStore.appendExternalCandidateJsonl(staged); |
| 61 | try { memGraph.recordExternalCandidate({ asset: staged, source: source, signals: signals }); } catch (e) {} |
| 62 | |
| 63 | if (emitDecisions) { |
| 64 | try { |
| 65 | var dm2 = a2aProto.buildDecision({ assetId: staged.asset_id, localId: staged.id, decision: 'quarantine', reason: 'staged as external candidate' }); |
| 66 | a2aProto.getTransport().send(dm2); |
| 67 | } catch (e) {} |
| 68 | } |
| 69 | |
| 70 | accepted += 1; |
| 71 | } |
| 72 | |
| 73 | process.stdout.write('accepted=' + accepted + ' rejected=' + rejected + '\n'); |
| 74 | } |
| 75 | |
| 76 | try { main(); } catch (e) { |
| 77 | process.stderr.write((e && e.message ? e.message : String(e)) + '\n'); |
no test coverage detected