e56ea246bf
Centralize ordered bot profiles and encrypted credentials in `bot-agents`. - Exposes one action input: `master-key`. - Uses Gitea’s automatic job token internally; dependent repositories provide no author/reviewer/profile inputs. - Keeps encrypted Claude and reviewer credentials in `profiles.yml`; tokenless Codex uses its persisted subscription login. - Falls back only on recognized quota exhaustion, with a distinct UID/home per profile and descendant cleanup before fallback. - Separates decryption, agent execution, and reviewer posting so privileged credentials never enter an agent process. - Installs `obra/superpowers` with the standard Skills CLI; removes custom discovery code. - Adds root-level isolation, rollback, symlink, fallback, posting, YAML, and self-workflow CI coverage. Checks: formatting, lint, all entrypoint type checks, 35 tests as root, diff check, secret scan, and repository diagnostics. Reviewed-on: #14 Co-authored-by: Danny Kim <temeddix@gmail.com> Co-committed-by: Danny Kim <temeddix@gmail.com>
26 lines
573 B
TypeScript
26 lines
573 B
TypeScript
import { prepareRuntime } from "./runtime.ts";
|
|
|
|
const env = (name: string): string => {
|
|
const value = Deno.env.get(name);
|
|
if (!value) throw new Error(`${name} is not set`);
|
|
return value;
|
|
};
|
|
|
|
const manifest = await prepareRuntime(
|
|
env("ACTION_PATH"),
|
|
env("RUNNER_TEMP"),
|
|
env("BOT_AGENTS_MASTER_KEY"),
|
|
);
|
|
try {
|
|
await Deno.writeTextFile(
|
|
env("GITHUB_OUTPUT"),
|
|
`manifest=${manifest.manifestPath}\n`,
|
|
{ append: true },
|
|
);
|
|
} catch (error) {
|
|
await Deno.remove(manifest.runtimeDir, { recursive: true }).catch(() =>
|
|
undefined
|
|
);
|
|
throw error;
|
|
}
|