| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env node
- 'use strict';
- const assert = require('assert');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const {
- parseArgs,
- normalizeInstallChannel,
- normalizeInstallScope,
- upsertCodexProjectMcp,
- verifyVocToolDiscovery,
- persistNeutralCredential
- } = require('../bin/claude-voc');
- async function main() {
- const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'voc-installer-acceptance-'));
- const targetDir = path.join(tempRoot, '.codex', 'plugins', 'voc-intelligence');
- const configDir = path.join(tempRoot, '.codex');
- const configPath = path.join(configDir, 'config.toml');
- const credentialsPath = path.join(tempRoot, '.vocmarket', 'credentials.json');
- const previousToken = process.env.FMODE_API_KEY;
- try {
- assert.strictEqual(normalizeInstallChannel('CODEX'), 'codex');
- assert.strictEqual(normalizeInstallScope('codex', 'global'), 'global');
- assert.strictEqual(normalizeInstallScope('workbuddy', 'global'), 'project');
- const options = parseArgs(['workspace', '--activate', '--channel=codex', '--scope=global']);
- assert.strictEqual(options.activate, true);
- assert.strictEqual(options.smoke, false);
- assert.strictEqual(options.channel, 'codex');
- assert.strictEqual(options.scope, 'global');
- fs.mkdirSync(configDir, { recursive: true });
- fs.writeFileSync(configPath, [
- 'model = "gpt-test"',
- '',
- '[mcp_servers.existing]',
- 'command = "existing-command"',
- '',
- '[mcp_servers.voc]',
- 'command = "old-command"',
- ''
- ].join('\n'));
- upsertCodexProjectMcp(targetDir, tempRoot);
- const config = fs.readFileSync(configPath, 'utf8');
- assert.match(config, /model = "gpt-test"/);
- assert.match(config, /\[mcp_servers\.existing]/);
- assert.strictEqual((config.match(/\[mcp_servers\.voc]/g) || []).length, 1);
- assert.ok(config.includes('mcp\\\\src\\\\server.js') || config.includes('mcp/src/server.js'));
- process.env.FMODE_API_KEY = 'sk-installer_acceptance-123456789';
- assert.strictEqual(persistNeutralCredential(credentialsPath), true);
- const credentials = JSON.parse(fs.readFileSync(credentialsPath, 'utf8'));
- assert.strictEqual(credentials.fmodeApiKey, process.env.FMODE_API_KEY);
- const tools = await verifyVocToolDiscovery(path.resolve(__dirname, '..'));
- assert.ok(tools.includes('voc_api_search'));
- assert.ok(tools.includes('voc_api_doc'));
- assert.ok(tools.includes('voc_api_call'));
- console.log(JSON.stringify({
- status: 'ok',
- checks: ['channels', 'no-smoke activation', 'Codex TOML merge', 'neutral credentials', 'MCP ListTools'],
- discoveredTools: tools
- }, null, 2));
- } finally {
- if (previousToken === undefined) delete process.env.FMODE_API_KEY;
- else process.env.FMODE_API_KEY = previousToken;
- fs.rmSync(tempRoot, { recursive: true, force: true });
- }
- }
- main().catch(error => {
- console.error(error.message);
- process.exit(1);
- });
|