| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env node
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const { readTihaoToken } = require('../mcp/src/core/credentials');
- const { resolveTihaoUserInfo } = require('../mcp/src/core/payment-links');
- const { runTihaoSourcing } = require('../mcp/src/tools/tihao-brief-sourcing-run');
- async function main() {
- const token = readTihaoToken({});
- if (!token) {
- console.error('Missing TIHAO_SESSION_TOKEN / VOC_ECOMMERCE_TOKEN / VOC_TOKEN. Refusing to run real live acceptance.');
- process.exit(2);
- }
- const identity = await resolveTihaoUserInfo(token);
- const company = process.env.TIHAO_COMPANY || process.env.VOC_ECOMMERCE_COMPANY || process.env.COMPANY_OBJECT_ID || identity.companyId || '';
- if (!company) {
- console.error('Missing company. Set TIHAO_COMPANY / VOC_ECOMMERCE_COMPANY / COMPANY_OBJECT_ID, or use a sessionToken whose Parse user has company.');
- process.exit(2);
- }
- const output = path.join(os.tmpdir(), `tihao-live-acceptance-${Date.now()}`);
- const dhaBrief = path.resolve(__dirname, '..', '..', 'dha_brief.xlsx');
- const result = await runTihaoSourcing({
- collectionMode: 'live',
- brief: fs.existsSync(dhaBrief) ? dhaBrief : undefined,
- briefText: fs.existsSync(dhaBrief) ? undefined : 'DHA 母婴 小红书 10人 粉丝范围 2万-50万 预算 1000-5000',
- company,
- keywordLimit: 1,
- pagesPerKeyword: 1,
- output
- });
- if (result.status !== 'ok') {
- console.error(`live acceptance returned status=${result.status}`);
- console.error(result.assistantMessage);
- process.exit(1);
- }
- if (!result.summary || result.summary.total < 1) {
- console.error('live acceptance did not produce any candidate.');
- process.exit(1);
- }
- if (!result.summary || result.summary.clientReadyCount < 1) {
- console.error('live acceptance did not produce a client-ready shortlist.');
- process.exit(1);
- }
- if (!result.files || !result.files.every(file => fs.existsSync(file))) {
- console.error('live acceptance did not write all expected files.');
- process.exit(1);
- }
- if (JSON.stringify(result).includes(token)) {
- console.error('live acceptance leaked token in result.');
- process.exit(1);
- }
- const fileLeaks = result.files.filter(file => fs.readFileSync(file, 'utf8').includes(token));
- if (fileLeaks.length > 0) {
- console.error('live acceptance leaked token in output files.');
- process.exit(1);
- }
- console.log(`live acceptance ok: candidates=${result.summary.total}, clientReady=${result.summary.clientReadyCount}, output=${output}`);
- }
- main().catch(error => {
- console.error(error && error.stack ? error.stack : String(error));
- process.exit(1);
- });
|