Files
BaiLongma/scripts/smoke-tools.mjs

54 lines
2.1 KiB
JavaScript

import { executeTool } from '../src/capabilities/executor.js'
const checks = []
function assert(condition, label, detail = '') {
checks.push({ ok: !!condition, label, detail })
if (!condition) {
console.error(`[FAIL] ${label}${detail ? `\n ${detail}` : ''}`)
} else {
console.log(`[PASS] ${label}`)
}
}
function parseJsonResult(value) {
try {
return JSON.parse(String(value || ''))
} catch {
return null
}
}
const testPath = `smoke/verifiable-${Date.now()}.txt`
const testContent = 'hello verifiable completion'
const writeResultText = await executeTool('write_file', {
path: testPath,
content: testContent,
}, { source: 'smoke-test' })
const writeResult = parseJsonResult(writeResultText)
assert(writeResult?.ok === true && writeResult?.verified === true, 'write_file returns verified evidence', writeResultText)
assert(writeResult?.bytes === Buffer.byteLength(testContent, 'utf-8'), 'write_file reports byte count', writeResultText)
const readResult = await executeTool('read_file', { path: testPath }, { source: 'smoke-test' })
assert(readResult === testContent, 'read_file reads back exact content', readResult)
const outsideRead = await executeTool('read_file', { path: '../package.json' }, { source: 'smoke-test' })
assert(/^执行失败:访问被拒绝/.test(String(outsideRead)), 'read_file rejects sandbox escape', outsideRead)
const deniedCommandText = await executeTool('exec_command', {
command: 'type ..\\package.json',
}, { source: 'smoke-test' })
const deniedCommand = parseJsonResult(deniedCommandText)
assert(deniedCommand?.ok === false && deniedCommand?.error === 'permission denied', 'exec_command rejects parent directory access', deniedCommandText)
const deleteResultText = await executeTool('delete_file', { path: testPath }, { source: 'smoke-test' })
const deleteResult = parseJsonResult(deleteResultText)
assert(deleteResult?.ok === true && deleteResult?.verified_absent === true, 'delete_file returns absence verification', deleteResultText)
const failed = checks.filter(item => !item.ok)
console.log(`\nSmoke checks: ${checks.length - failed.length}/${checks.length} passed`)
if (failed.length) {
process.exitCode = 1
}