feat(ruview): secure community metaharness flywheel (#1467)

* feat(ruview): add secure community metaharness flywheel

* fix(ruview): canonicalize manifest line endings
This commit is contained in:
rUv
2026-07-28 23:57:16 -04:00
committed by GitHub
parent e78252a575
commit 2b7853b18f
41 changed files with 1944 additions and 78 deletions
+17
View File
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
import { runProcess } from '../process-runner.js';
import { assertTrustedRuViewRepo } from '../repo-trust.js';
export function buildClaudeCodeArgs({ write = false } = {}) {
return ['-p', '--safe-mode', '--output-format', 'json', '--no-session-persistence', '--permission-mode', write ? 'acceptEdits' : 'plan',
'--allowedTools', write ? 'Read,Grep,Glob,Edit,Write' : 'Read,Grep,Glob'];
}
export async function runClaudeCode({
prompt, repoRoot, trustedRoot = repoRoot, allowWrite = false, confirm = false,
command = 'claude', commandArgs = [], ...runOptions
}) {
if (typeof prompt !== 'string' || !prompt.trim()) throw new TypeError('prompt must be a non-empty string');
const root = assertTrustedRuViewRepo(repoRoot, { trustedRoot });
const write = allowWrite === true && confirm === true;
return runProcess(command, [...commandArgs, ...buildClaudeCodeArgs({ write })], { ...runOptions, cwd: root, input: prompt });
}
export default Object.freeze({ name: 'claude-code', run: runClaudeCode, buildArgs: buildClaudeCodeArgs });
+17
View File
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
import { runProcess } from '../process-runner.js';
import { assertTrustedRuViewRepo } from '../repo-trust.js';
export function buildCodexArgs(root, { write = false } = {}) {
return ['exec', '-', '-C', root, '--sandbox', write ? 'workspace-write' : 'read-only',
'--ephemeral', '--json', '--strict-config', '--ignore-user-config', '--ignore-rules'];
}
export async function runCodex({
prompt, repoRoot, trustedRoot = repoRoot, allowWrite = false, confirm = false,
command = 'codex', commandArgs = [], ...runOptions
}) {
if (typeof prompt !== 'string' || !prompt.trim()) throw new TypeError('prompt must be a non-empty string');
const root = assertTrustedRuViewRepo(repoRoot, { trustedRoot });
const write = allowWrite === true && confirm === true;
return runProcess(command, [...commandArgs, ...buildCodexArgs(root, { write })], { ...runOptions, cwd: root, input: prompt });
}
export default Object.freeze({ name: 'codex', run: runCodex, buildArgs: buildCodexArgs });
+10
View File
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
import claudeCode from './claude-code.js';
import codex from './codex.js';
export { claudeCode, codex };
export const HOSTS = Object.freeze({ 'claude-code': claudeCode, codex });
export function getHost(name) {
const host = HOSTS[name];
if (!host) throw new Error(`Unsupported host: ${name}`);
return host;
}