mirror of
https://github.com/PR0M3TH3AN/TORCH.git
synced 2026-10-27 07:51:52 +00:00
Merge pull request #312 from PR0M3TH3AN/fix-platform-detection-unknown-763535823094544277
Fix "Unknown" platform on Nostr task cards
This commit is contained in:
6 files changed
+73
-4
No files matched your search
@@ -25,6 +25,8 @@ import {
|
||||
summarizeLockFailureReasons,
|
||||
} from './scheduler-lock.mjs';
|
||||
|
||||
import { detectPlatform } from '../../src/utils.mjs';
|
||||
|
||||
const VALID_CADENCES = new Set(['daily', 'weekly']);
|
||||
const ALL_EXCLUDED_REASON = 'All roster tasks currently claimed by other agents';
|
||||
const FAILURE_CATEGORY = {
|
||||
@@ -35,7 +37,7 @@ const FAILURE_CATEGORY = {
|
||||
};
|
||||
|
||||
function parseArgs(argv) {
|
||||
const args = { cadence: null, platform: process.env.AGENT_PLATFORM || 'codex', model: process.env.AGENT_MODEL || null };
|
||||
const args = { cadence: null, platform: process.env.AGENT_PLATFORM || detectPlatform() || 'unknown', model: process.env.AGENT_MODEL || null };
|
||||
for (let i = 0; i < argv.length; i += 1) {
|
||||
const value = argv[i];
|
||||
if (!value.startsWith('--') && !args.cadence) {
|
||||
|
||||
@@ -20,7 +20,12 @@ export function getSafeEnv() {
|
||||
key.startsWith('NOSTR_') ||
|
||||
key.startsWith('TORCH_') ||
|
||||
key.startsWith('SCHEDULER_') ||
|
||||
key.startsWith('AGENT_')) {
|
||||
key.startsWith('AGENT_') ||
|
||||
key.startsWith('JULES_') ||
|
||||
key.startsWith('CODEX_') ||
|
||||
key.startsWith('CLAUDE_') ||
|
||||
key.startsWith('ANTHROPIC_') ||
|
||||
key.startsWith('GOOSE_')) {
|
||||
safeEnv[key] = process.env[key];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ export function detectPlatform() {
|
||||
if (process.env.JULES_API_KEY || process.env.JULES_SESSION_ID) return 'jules';
|
||||
if (process.env.CODEX_API_KEY || process.env.CODEX_SESSION_ID) return 'codex';
|
||||
if (process.env.GOOSE_API_KEY || process.env.GOOSE_SESSION_ID) return 'goose';
|
||||
if (process.env.CLAUDE_API_KEY || process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_SESSION_ID) return 'claude';
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ async function setupFixture({ lockShellBody }) {
|
||||
await fs.copyFile(SOURCE_SCRIPT, path.join(scriptsDir, 'run-scheduler-cycle.mjs'));
|
||||
await fs.copyFile(path.resolve('scripts/agent/scheduler-utils.mjs'), path.join(scriptsDir, 'scheduler-utils.mjs'));
|
||||
await fs.copyFile(path.resolve('scripts/agent/scheduler-lock.mjs'), path.join(scriptsDir, 'scheduler-lock.mjs'));
|
||||
await fs.copyFile(path.resolve('src/utils.mjs'), path.join(root, 'src', 'utils.mjs'));
|
||||
await fs.writeFile(path.join(scriptsDir, 'verify-run-artifacts.mjs'), '#!/usr/bin/env node\nprocess.exit(0);\n', 'utf8');
|
||||
await fs.writeFile(path.join(root, 'src', 'prompts', 'roster.json'), JSON.stringify({ daily: ['agent-a'] }, null, 2), 'utf8');
|
||||
await fs.writeFile(path.join(root, 'src', 'prompts', 'daily', 'agent-a.md'), '# agent-a\n', 'utf8');
|
||||
|
||||
@@ -4,6 +4,7 @@ import fs from 'node:fs/promises';
|
||||
import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import { spawn } from 'node:child_process';
|
||||
import { detectPlatform } from '../src/utils.mjs';
|
||||
|
||||
const SOURCE_SCRIPT = path.resolve('scripts/agent/run-scheduler-cycle.mjs');
|
||||
|
||||
@@ -44,6 +45,7 @@ async function setupFixture({ lockShellBody = ':', schedulerPolicy = {} }) {
|
||||
await fs.copyFile(SOURCE_SCRIPT, path.join(scriptsDir, 'run-scheduler-cycle.mjs'));
|
||||
await fs.copyFile(path.resolve('scripts/agent/scheduler-utils.mjs'), path.join(scriptsDir, 'scheduler-utils.mjs'));
|
||||
await fs.copyFile(path.resolve('scripts/agent/scheduler-lock.mjs'), path.join(scriptsDir, 'scheduler-lock.mjs'));
|
||||
await fs.copyFile(path.resolve('src/utils.mjs'), path.join(root, 'src', 'utils.mjs'));
|
||||
await fs.writeFile(
|
||||
path.join(scriptsDir, 'verify-run-artifacts.mjs'),
|
||||
'#!/usr/bin/env node\nprocess.exit(0);\n',
|
||||
@@ -150,7 +152,7 @@ test('lock preflight e2e: successful lock writes completed status snapshot', { c
|
||||
cadence: 'daily',
|
||||
agent: 'agent-a',
|
||||
status: 'completed',
|
||||
platform: 'codex',
|
||||
platform: detectPlatform() || 'unknown',
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
+59
-1
@@ -2,7 +2,7 @@ import { describe, it, after } from 'node:test';
|
||||
import assert from 'node:assert';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { getIsoWeekStr, todayDateStr, nowUnix, ensureDir } from '../src/utils.mjs';
|
||||
import { getIsoWeekStr, todayDateStr, nowUnix, ensureDir, detectPlatform } from '../src/utils.mjs';
|
||||
|
||||
describe('Date Utilities', () => {
|
||||
describe('todayDateStr', () => {
|
||||
@@ -59,6 +59,64 @@ describe('Date Utilities', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Platform Utilities', () => {
|
||||
describe('detectPlatform', () => {
|
||||
const originalEnv = { ...process.env };
|
||||
|
||||
// Helper to clear relevant env vars
|
||||
const clearEnv = () => {
|
||||
delete process.env.JULES_SESSION_ID;
|
||||
delete process.env.JULES_API_KEY;
|
||||
delete process.env.CODEX_SESSION_ID;
|
||||
delete process.env.CODEX_API_KEY;
|
||||
delete process.env.GOOSE_SESSION_ID;
|
||||
delete process.env.GOOSE_API_KEY;
|
||||
delete process.env.CLAUDE_SESSION_ID;
|
||||
delete process.env.CLAUDE_API_KEY;
|
||||
delete process.env.ANTHROPIC_API_KEY;
|
||||
};
|
||||
|
||||
after(() => {
|
||||
process.env = originalEnv;
|
||||
});
|
||||
|
||||
it('detects jules', () => {
|
||||
clearEnv();
|
||||
process.env.JULES_SESSION_ID = 'test';
|
||||
assert.strictEqual(detectPlatform(), 'jules');
|
||||
});
|
||||
|
||||
it('detects codex', () => {
|
||||
clearEnv();
|
||||
process.env.CODEX_API_KEY = 'test';
|
||||
assert.strictEqual(detectPlatform(), 'codex');
|
||||
});
|
||||
|
||||
it('detects goose', () => {
|
||||
clearEnv();
|
||||
process.env.GOOSE_SESSION_ID = 'test';
|
||||
assert.strictEqual(detectPlatform(), 'goose');
|
||||
});
|
||||
|
||||
it('detects claude via CLAUDE_API_KEY', () => {
|
||||
clearEnv();
|
||||
process.env.CLAUDE_API_KEY = 'test';
|
||||
assert.strictEqual(detectPlatform(), 'claude');
|
||||
});
|
||||
|
||||
it('detects claude via ANTHROPIC_API_KEY', () => {
|
||||
clearEnv();
|
||||
process.env.ANTHROPIC_API_KEY = 'test';
|
||||
assert.strictEqual(detectPlatform(), 'claude');
|
||||
});
|
||||
|
||||
it('returns null if no platform detected', () => {
|
||||
clearEnv();
|
||||
assert.strictEqual(detectPlatform(), null);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('File Utilities', () => {
|
||||
describe('ensureDir', () => {
|
||||
const tempBase = fs.mkdtempSync(path.join(process.cwd(), 'test-utils-'));
|
||||
|
||||
Reference in new issue
Block a user