@unimatrix27/ralph-harness 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CONTRIBUTING.md +89 -0
  2. package/README.md +401 -0
  3. package/dist/bin/ralph-bootstrap-aws.d.ts +3 -0
  4. package/dist/bin/ralph-bootstrap-aws.d.ts.map +1 -0
  5. package/dist/bin/ralph-bootstrap-aws.js +43 -0
  6. package/dist/bin/ralph-bootstrap-aws.js.map +1 -0
  7. package/dist/bin/ralph-fire.d.ts +3 -0
  8. package/dist/bin/ralph-fire.d.ts.map +1 -0
  9. package/dist/bin/ralph-fire.js +59 -0
  10. package/dist/bin/ralph-fire.js.map +1 -0
  11. package/dist/bin/ralph-gsm.d.ts +3 -0
  12. package/dist/bin/ralph-gsm.d.ts.map +1 -0
  13. package/dist/bin/ralph-gsm.js +93 -0
  14. package/dist/bin/ralph-gsm.js.map +1 -0
  15. package/dist/bin/ralph-orchestrate.d.ts +3 -0
  16. package/dist/bin/ralph-orchestrate.d.ts.map +1 -0
  17. package/dist/bin/ralph-orchestrate.js +20 -0
  18. package/dist/bin/ralph-orchestrate.js.map +1 -0
  19. package/dist/bin/ralph-sync-credential.d.ts +3 -0
  20. package/dist/bin/ralph-sync-credential.d.ts.map +1 -0
  21. package/dist/bin/ralph-sync-credential.js +44 -0
  22. package/dist/bin/ralph-sync-credential.js.map +1 -0
  23. package/dist/bin/ralph-sync-github-pat.d.ts +3 -0
  24. package/dist/bin/ralph-sync-github-pat.d.ts.map +1 -0
  25. package/dist/bin/ralph-sync-github-pat.js +93 -0
  26. package/dist/bin/ralph-sync-github-pat.js.map +1 -0
  27. package/dist/bin/ralph-tail-logs.d.ts +3 -0
  28. package/dist/bin/ralph-tail-logs.d.ts.map +1 -0
  29. package/dist/bin/ralph-tail-logs.js +72 -0
  30. package/dist/bin/ralph-tail-logs.js.map +1 -0
  31. package/dist/bin/ralph-validate-config.d.ts +3 -0
  32. package/dist/bin/ralph-validate-config.d.ts.map +1 -0
  33. package/dist/bin/ralph-validate-config.js +41 -0
  34. package/dist/bin/ralph-validate-config.js.map +1 -0
  35. package/dist/lib/aws-bootstrap.d.ts +53 -0
  36. package/dist/lib/aws-bootstrap.d.ts.map +1 -0
  37. package/dist/lib/aws-bootstrap.js +438 -0
  38. package/dist/lib/aws-bootstrap.js.map +1 -0
  39. package/dist/lib/aws-clients.d.ts +17 -0
  40. package/dist/lib/aws-clients.d.ts.map +1 -0
  41. package/dist/lib/aws-clients.js +25 -0
  42. package/dist/lib/aws-clients.js.map +1 -0
  43. package/dist/lib/claude-runner.d.ts +21 -0
  44. package/dist/lib/claude-runner.d.ts.map +1 -0
  45. package/dist/lib/claude-runner.js +101 -0
  46. package/dist/lib/claude-runner.js.map +1 -0
  47. package/dist/lib/credential-syncer.d.ts +27 -0
  48. package/dist/lib/credential-syncer.d.ts.map +1 -0
  49. package/dist/lib/credential-syncer.js +116 -0
  50. package/dist/lib/credential-syncer.js.map +1 -0
  51. package/dist/lib/ec2-orchestrator.d.ts +38 -0
  52. package/dist/lib/ec2-orchestrator.d.ts.map +1 -0
  53. package/dist/lib/ec2-orchestrator.js +469 -0
  54. package/dist/lib/ec2-orchestrator.js.map +1 -0
  55. package/dist/lib/env-loader.d.ts +18 -0
  56. package/dist/lib/env-loader.d.ts.map +1 -0
  57. package/dist/lib/env-loader.js +120 -0
  58. package/dist/lib/env-loader.js.map +1 -0
  59. package/dist/lib/fire-launcher.d.ts +59 -0
  60. package/dist/lib/fire-launcher.d.ts.map +1 -0
  61. package/dist/lib/fire-launcher.js +320 -0
  62. package/dist/lib/fire-launcher.js.map +1 -0
  63. package/dist/lib/gh-runner.d.ts +13 -0
  64. package/dist/lib/gh-runner.d.ts.map +1 -0
  65. package/dist/lib/gh-runner.js +50 -0
  66. package/dist/lib/gh-runner.js.map +1 -0
  67. package/dist/lib/github-state-mutator.d.ts +11 -0
  68. package/dist/lib/github-state-mutator.d.ts.map +1 -0
  69. package/dist/lib/github-state-mutator.js +179 -0
  70. package/dist/lib/github-state-mutator.js.map +1 -0
  71. package/dist/lib/phase-result-schemas.d.ts +88 -0
  72. package/dist/lib/phase-result-schemas.d.ts.map +1 -0
  73. package/dist/lib/phase-result-schemas.js +180 -0
  74. package/dist/lib/phase-result-schemas.js.map +1 -0
  75. package/dist/lib/post-hoc-agent-stuck-checker.d.ts +26 -0
  76. package/dist/lib/post-hoc-agent-stuck-checker.d.ts.map +1 -0
  77. package/dist/lib/post-hoc-agent-stuck-checker.js +142 -0
  78. package/dist/lib/post-hoc-agent-stuck-checker.js.map +1 -0
  79. package/dist/lib/prompt-renderer.d.ts +4 -0
  80. package/dist/lib/prompt-renderer.d.ts.map +1 -0
  81. package/dist/lib/prompt-renderer.js +30 -0
  82. package/dist/lib/prompt-renderer.js.map +1 -0
  83. package/dist/lib/security-runner.d.ts +7 -0
  84. package/dist/lib/security-runner.d.ts.map +1 -0
  85. package/dist/lib/security-runner.js +53 -0
  86. package/dist/lib/security-runner.js.map +1 -0
  87. package/dist/lib/structured-log-emitter.d.ts +53 -0
  88. package/dist/lib/structured-log-emitter.d.ts.map +1 -0
  89. package/dist/lib/structured-log-emitter.js +122 -0
  90. package/dist/lib/structured-log-emitter.js.map +1 -0
  91. package/dist/lib/target-config-schema.d.ts +28 -0
  92. package/dist/lib/target-config-schema.d.ts.map +1 -0
  93. package/dist/lib/target-config-schema.js +157 -0
  94. package/dist/lib/target-config-schema.js.map +1 -0
  95. package/dist/lib/user-data-renderer.d.ts +20 -0
  96. package/dist/lib/user-data-renderer.d.ts.map +1 -0
  97. package/dist/lib/user-data-renderer.js +75 -0
  98. package/dist/lib/user-data-renderer.js.map +1 -0
  99. package/lib/cloud-init/system-setup.sh +338 -0
  100. package/package.json +55 -0
  101. package/prompts/discovery.md +182 -0
  102. package/prompts/implementation.md +161 -0
  103. package/prompts/review.md +135 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec2-orchestrator.js","sourceRoot":"","sources":["../../src/lib/ec2-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const MODULE_PREFIX = "env-loader";
2
+ export interface DiscoverOptions {
3
+ cwd?: string;
4
+ homeDir?: string;
5
+ xdgConfigHome?: string;
6
+ }
7
+ export declare function discoverDotenvPaths(opts?: DiscoverOptions): string[];
8
+ export declare function parseDotenv(content: string): Record<string, string>;
9
+ export interface LoadOptions extends DiscoverOptions {
10
+ env?: NodeJS.ProcessEnv;
11
+ }
12
+ export interface LoadSummary {
13
+ loaded: string[];
14
+ applied: number;
15
+ skippedNoOverride: number;
16
+ }
17
+ export declare function loadDotenv(opts?: LoadOptions): LoadSummary;
18
+ //# sourceMappingURL=env-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../../src/lib/env-loader.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,eAAoB,GAAG,MAAM,EAAE,CAMxE;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCnE;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,WAAgB,GAAG,WAAW,CAqC9D"}
@@ -0,0 +1,120 @@
1
+ // env-loader — `.env` discovery + parsing for `ralph-fire`. Replaces what
2
+ // would otherwise be a `set -a; source .env; set +a` block in the bash port.
3
+ //
4
+ // Discovery order (first match wins per key, no-override on already-set vars):
5
+ // 1. `<cwd>/.env`
6
+ // 2. `~/.config/ralph/.env` (XDG default; honours XDG_CONFIG_HOME
7
+ // when set)
8
+ //
9
+ // Semantics:
10
+ // - already-set process.env keys are NEVER overridden (operator wins)
11
+ // - both files are read when both exist; the CWD file takes precedence
12
+ // for keys that appear in both (mirrors PATH-style "first wins")
13
+ // - quoted values: KEY="value" or KEY='value' — surrounding quotes stripped,
14
+ // no escape processing inside (we never needed it; the bash port didn't
15
+ // interpret backslashes either)
16
+ // - unquoted values: trailing whitespace is trimmed
17
+ // - blank lines, full-line comments (`# ...`), and malformed lines (no
18
+ // `=`) are silently skipped — matches dotenv's "silent malformed" rule
19
+ //
20
+ // Public surface:
21
+ // discoverDotenvPaths(opts?) — returns the ordered list of paths to try
22
+ // parseDotenv(content) — returns Record<string,string> from a file body
23
+ // loadDotenv(opts?) — reads + parses both files, mutates the
24
+ // supplied env object (default: process.env),
25
+ // honours no-override; returns a summary
26
+ import { readFileSync, statSync } from "node:fs";
27
+ import { homedir } from "node:os";
28
+ import { join } from "node:path";
29
+ export const MODULE_PREFIX = "env-loader";
30
+ export function discoverDotenvPaths(opts = {}) {
31
+ const cwd = opts.cwd ?? process.cwd();
32
+ const home = opts.homeDir ?? homedir();
33
+ const xdg = opts.xdgConfigHome ?? process.env.XDG_CONFIG_HOME;
34
+ const xdgRoot = xdg && xdg.length > 0 ? xdg : join(home, ".config");
35
+ return [join(cwd, ".env"), join(xdgRoot, "ralph", ".env")];
36
+ }
37
+ const KEY_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
38
+ export function parseDotenv(content) {
39
+ const out = {};
40
+ for (const rawLine of content.split(/\r?\n/)) {
41
+ const line = rawLine.replace(/^/, ""); // strip BOM on first line
42
+ const trimmed = line.trim();
43
+ if (trimmed.length === 0)
44
+ continue;
45
+ if (trimmed.startsWith("#"))
46
+ continue;
47
+ const eq = line.indexOf("=");
48
+ if (eq <= 0)
49
+ continue; // no key, or `=value`
50
+ const key = line.slice(0, eq).trim();
51
+ if (!KEY_RE.test(key))
52
+ continue;
53
+ let value = line.slice(eq + 1);
54
+ // Trim leading whitespace (allows `KEY = value` or `KEY= value`)
55
+ value = value.replace(/^[ \t]+/, "");
56
+ if (value.length >= 2) {
57
+ const first = value[0];
58
+ const last = value[value.length - 1];
59
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
60
+ value = value.slice(1, -1);
61
+ }
62
+ else {
63
+ // Strip trailing whitespace and any inline comment marker on
64
+ // unquoted values. The dotenv convention is that ` #` introduces
65
+ // a trailing comment ONLY when preceded by whitespace.
66
+ const inlineCommentMatch = value.match(/[ \t]+#.*$/);
67
+ if (inlineCommentMatch) {
68
+ value = value.slice(0, inlineCommentMatch.index);
69
+ }
70
+ value = value.replace(/[ \t]+$/, "");
71
+ }
72
+ }
73
+ else {
74
+ value = value.replace(/[ \t]+$/, "");
75
+ }
76
+ out[key] = value;
77
+ }
78
+ return out;
79
+ }
80
+ export function loadDotenv(opts = {}) {
81
+ const env = opts.env ?? process.env;
82
+ const paths = discoverDotenvPaths(opts);
83
+ const loaded = [];
84
+ let applied = 0;
85
+ let skippedNoOverride = 0;
86
+ // First-wins across files, then no-override against env. That means we
87
+ // accumulate parsed keys in declaration order, then apply only those that
88
+ // are not already in env.
89
+ const merged = {};
90
+ for (const p of paths) {
91
+ let raw;
92
+ try {
93
+ const s = statSync(p);
94
+ if (!s.isFile())
95
+ continue;
96
+ raw = readFileSync(p, "utf8");
97
+ }
98
+ catch {
99
+ // missing or unreadable: silently skip (dotenv-style)
100
+ continue;
101
+ }
102
+ loaded.push(p);
103
+ const parsed = parseDotenv(raw);
104
+ for (const [k, v] of Object.entries(parsed)) {
105
+ if (!Object.prototype.hasOwnProperty.call(merged, k)) {
106
+ merged[k] = v;
107
+ }
108
+ }
109
+ }
110
+ for (const [k, v] of Object.entries(merged)) {
111
+ if (env[k] !== undefined) {
112
+ skippedNoOverride += 1;
113
+ continue;
114
+ }
115
+ env[k] = v;
116
+ applied += 1;
117
+ }
118
+ return { loaded, applied, skippedNoOverride };
119
+ }
120
+ //# sourceMappingURL=env-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../../src/lib/env-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { type AwsClients } from "./aws-clients.js";
2
+ export declare const MODULE_PREFIX = "fire-launcher";
3
+ export interface LauncherConfig {
4
+ region: string;
5
+ logGroup: string;
6
+ githubTokenSsmKey: string;
7
+ claudeOauthSsmKey: string;
8
+ instanceType: string;
9
+ rootVolumeGb: number;
10
+ sgName: string;
11
+ iamProfile: string;
12
+ amiSsmParam: string;
13
+ maxLifetimeMin: number;
14
+ pollIntervalSec: number;
15
+ agentStuckLabel: string;
16
+ harnessVersion: string;
17
+ targetRepo: string;
18
+ }
19
+ export declare const DEFAULTS: {
20
+ readonly region: "eu-central-1";
21
+ readonly logGroup: "/ralph/main";
22
+ readonly githubTokenSsmKey: "/ralph/github-pat";
23
+ readonly claudeOauthSsmKey: "/ralph/claude-oauth-credential";
24
+ readonly instanceType: "m7a.xlarge";
25
+ readonly rootVolumeGb: 30;
26
+ readonly sgName: "ralph-sg";
27
+ readonly iamProfile: "ralph-ec2-profile";
28
+ readonly amiSsmParam: "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64";
29
+ readonly maxLifetimeMin: 75;
30
+ readonly pollIntervalSec: 20;
31
+ readonly agentStuckLabel: "agent-stuck";
32
+ };
33
+ export declare class LauncherError extends Error {
34
+ readonly exitCode: number;
35
+ constructor(exitCode: number, message: string);
36
+ }
37
+ export declare function resolveLauncherConfig(env: NodeJS.ProcessEnv, defaultHarnessVersion: string): LauncherConfig;
38
+ export type Sleeper = (ms: number) => Promise<void>;
39
+ export type Clock = () => number;
40
+ interface WaitOptions {
41
+ config: LauncherConfig;
42
+ instanceId: string;
43
+ info: (line: string) => void;
44
+ now?: Clock;
45
+ sleep?: Sleeper;
46
+ }
47
+ export declare function waitForTerminated(clients: AwsClients, opts: WaitOptions): Promise<number>;
48
+ export interface RunOptions {
49
+ env?: NodeJS.ProcessEnv;
50
+ defaultHarnessVersion: string;
51
+ clients?: AwsClients;
52
+ info?: (line: string) => void;
53
+ userDataOverride?: string;
54
+ now?: Clock;
55
+ sleep?: Sleeper;
56
+ }
57
+ export declare function run(opts: RunOptions): Promise<number>;
58
+ export {};
59
+ //# sourceMappingURL=fire-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire-launcher.d.ts","sourceRoot":"","sources":["../../src/lib/fire-launcher.ts"],"names":[],"mappings":"AA4CA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAcX,CAAC;AAEX,qBAAa,aAAc,SAAQ,KAAK;aACV,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI9D;AAqBD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,qBAAqB,EAAE,MAAM,GAC5B,cAAc,CAoChB;AAqKD,MAAM,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAGpD,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;AAGjC,UAAU,WAAW;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAGxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAG9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAsB,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAwF3D"}
@@ -0,0 +1,320 @@
1
+ // fire-launcher — TS port of iteration-1's lib/fire-launcher.sh, slimmed
2
+ // down to match the new user-data shape (small stub installs the npm
3
+ // package and execs ralph-orchestrate, rather than bundling bash inline).
4
+ //
5
+ // Public surface:
6
+ // run(opts) — fires one throwaway EC2 instance, polls for termination
7
+ // with a wall-clock ceiling, runs the post-hoc agent-stuck
8
+ // check, returns the wait-for-terminated exit code.
9
+ // resolveLauncherConfig(env) — pure resolver, exposed for tests.
10
+ //
11
+ // Reads from env:
12
+ // Required:
13
+ // RALPH_TARGET_REPO
14
+ //
15
+ // With overridable defaults (matching iteration-1 names):
16
+ // RALPH_AWS_REGION eu-central-1
17
+ // RALPH_LOG_GROUP /ralph/main
18
+ // RALPH_GITHUB_TOKEN_SSM_KEY /ralph/github-pat
19
+ // RALPH_CLAUDE_OAUTH_SSM_KEY /ralph/claude-oauth-credential
20
+ // RALPH_INSTANCE_TYPE m7a.xlarge
21
+ // RALPH_ROOT_VOLUME_GB 30
22
+ // RALPH_SG_NAME ralph-sg
23
+ // RALPH_IAM_PROFILE ralph-ec2-profile
24
+ // RALPH_AMI_SSM_PARAM /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
25
+ // RALPH_MAX_LIFETIME_MIN 75
26
+ // RALPH_POLL_INTERVAL_SEC 20
27
+ // RALPH_AGENT_STUCK_LABEL agent-stuck
28
+ // RALPH_HARNESS_VERSION <launcher's own running version>
29
+ //
30
+ // Exit codes:
31
+ // 0 instance terminated cleanly within the ceiling
32
+ // 2 missing AWS-side resource OR missing required env
33
+ // 3 wall-clock ceiling breached; force terminate-instances was issued
34
+ import { DescribeInstancesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVpcsCommand, RunInstancesCommand, TerminateInstancesCommand, } from "@aws-sdk/client-ec2";
35
+ import { GetParameterCommand } from "@aws-sdk/client-ssm";
36
+ import { defaultAwsClients, } from "./aws-clients.js";
37
+ import { postHocCheck } from "./post-hoc-agent-stuck-checker.js";
38
+ import { renderUserData } from "./user-data-renderer.js";
39
+ export const MODULE_PREFIX = "fire-launcher";
40
+ export const DEFAULTS = {
41
+ region: "eu-central-1",
42
+ logGroup: "/ralph/main",
43
+ githubTokenSsmKey: "/ralph/github-pat",
44
+ claudeOauthSsmKey: "/ralph/claude-oauth-credential",
45
+ instanceType: "m7a.xlarge",
46
+ rootVolumeGb: 30,
47
+ sgName: "ralph-sg",
48
+ iamProfile: "ralph-ec2-profile",
49
+ amiSsmParam: "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64",
50
+ maxLifetimeMin: 75,
51
+ pollIntervalSec: 20,
52
+ agentStuckLabel: "agent-stuck",
53
+ };
54
+ export class LauncherError extends Error {
55
+ exitCode;
56
+ constructor(exitCode, message) {
57
+ super(message);
58
+ this.exitCode = exitCode;
59
+ this.name = "LauncherError";
60
+ }
61
+ }
62
+ function moduleErr(message) {
63
+ return `${MODULE_PREFIX}: error: ${message}`;
64
+ }
65
+ function moduleInfo(message) {
66
+ return `${MODULE_PREFIX}: ${message}`;
67
+ }
68
+ function intFromEnv(value, fallback) {
69
+ if (!value || value.length === 0)
70
+ return fallback;
71
+ const n = Number.parseInt(value, 10);
72
+ if (!Number.isFinite(n) || n <= 0)
73
+ return fallback;
74
+ return n;
75
+ }
76
+ // resolveLauncherConfig — pure resolver. Pulls from env with iteration-1
77
+ // names + defaults. Throws LauncherError(2) if RALPH_TARGET_REPO is missing.
78
+ // `defaultHarnessVersion` is the launcher's own running package version,
79
+ // used when RALPH_HARNESS_VERSION is unset.
80
+ export function resolveLauncherConfig(env, defaultHarnessVersion) {
81
+ const targetRepo = env.RALPH_TARGET_REPO ?? "";
82
+ if (targetRepo.length === 0) {
83
+ throw new LauncherError(2, moduleErr("RALPH_TARGET_REPO is required (e.g. owner/repo)"));
84
+ }
85
+ return {
86
+ region: env.RALPH_AWS_REGION || DEFAULTS.region,
87
+ logGroup: env.RALPH_LOG_GROUP || DEFAULTS.logGroup,
88
+ githubTokenSsmKey: env.RALPH_GITHUB_TOKEN_SSM_KEY || DEFAULTS.githubTokenSsmKey,
89
+ claudeOauthSsmKey: env.RALPH_CLAUDE_OAUTH_SSM_KEY || DEFAULTS.claudeOauthSsmKey,
90
+ instanceType: env.RALPH_INSTANCE_TYPE || DEFAULTS.instanceType,
91
+ rootVolumeGb: intFromEnv(env.RALPH_ROOT_VOLUME_GB, DEFAULTS.rootVolumeGb),
92
+ sgName: env.RALPH_SG_NAME || DEFAULTS.sgName,
93
+ iamProfile: env.RALPH_IAM_PROFILE || DEFAULTS.iamProfile,
94
+ amiSsmParam: env.RALPH_AMI_SSM_PARAM || DEFAULTS.amiSsmParam,
95
+ maxLifetimeMin: intFromEnv(env.RALPH_MAX_LIFETIME_MIN, DEFAULTS.maxLifetimeMin),
96
+ pollIntervalSec: intFromEnv(env.RALPH_POLL_INTERVAL_SEC, DEFAULTS.pollIntervalSec),
97
+ agentStuckLabel: env.RALPH_AGENT_STUCK_LABEL || DEFAULTS.agentStuckLabel,
98
+ harnessVersion: env.RALPH_HARNESS_VERSION && env.RALPH_HARNESS_VERSION.length > 0
99
+ ? env.RALPH_HARNESS_VERSION
100
+ : defaultHarnessVersion,
101
+ targetRepo,
102
+ };
103
+ }
104
+ // resolveDefaultVpc — locate the region's default VPC.
105
+ async function resolveDefaultVpc(clients) {
106
+ const r = await clients.ec2.send(new DescribeVpcsCommand({
107
+ Filters: [{ Name: "is-default", Values: ["true"] }],
108
+ }));
109
+ const id = r.Vpcs?.[0]?.VpcId;
110
+ if (!id)
111
+ throw new LauncherError(2, moduleErr("no default VPC in region"));
112
+ return id;
113
+ }
114
+ async function resolvePublicSubnet(clients, vpcId) {
115
+ const r = await clients.ec2.send(new DescribeSubnetsCommand({
116
+ Filters: [
117
+ { Name: "vpc-id", Values: [vpcId] },
118
+ { Name: "default-for-az", Values: ["true"] },
119
+ ],
120
+ }));
121
+ const id = r.Subnets?.[0]?.SubnetId;
122
+ if (!id) {
123
+ throw new LauncherError(2, moduleErr(`no default subnet in vpc ${vpcId}`));
124
+ }
125
+ return id;
126
+ }
127
+ async function resolveSecurityGroup(clients, vpcId, name) {
128
+ const r = await clients.ec2.send(new DescribeSecurityGroupsCommand({
129
+ Filters: [
130
+ { Name: "vpc-id", Values: [vpcId] },
131
+ { Name: "group-name", Values: [name] },
132
+ ],
133
+ }));
134
+ const id = r.SecurityGroups?.[0]?.GroupId;
135
+ if (!id) {
136
+ throw new LauncherError(2, moduleErr(`security group ${name} not found in vpc ${vpcId}; run ralph-bootstrap-aws first`));
137
+ }
138
+ return id;
139
+ }
140
+ async function resolveImageId(clients, amiSsmParam) {
141
+ const r = await clients.ssm.send(new GetParameterCommand({ Name: amiSsmParam }));
142
+ const id = r.Parameter?.Value;
143
+ if (!id) {
144
+ throw new LauncherError(2, moduleErr(`could not resolve AL2023 image id from ${amiSsmParam}`));
145
+ }
146
+ return id;
147
+ }
148
+ async function runInstance(clients, p) {
149
+ const userDataB64 = Buffer.from(p.userData, "utf8").toString("base64");
150
+ const r = await clients.ec2.send(new RunInstancesCommand({
151
+ ImageId: p.imageId,
152
+ InstanceType: p.config.instanceType,
153
+ SubnetId: p.subnetId,
154
+ SecurityGroupIds: [p.sgId],
155
+ // RunInstances does not accept --associate-public-ip-address; the
156
+ // default subnet auto-assigns when MapPublicIpOnLaunch is true. We
157
+ // force-enable here via the network interface form.
158
+ NetworkInterfaces: [
159
+ {
160
+ DeviceIndex: 0,
161
+ SubnetId: p.subnetId,
162
+ Groups: [p.sgId],
163
+ AssociatePublicIpAddress: true,
164
+ },
165
+ ],
166
+ IamInstanceProfile: { Name: p.config.iamProfile },
167
+ InstanceInitiatedShutdownBehavior: "terminate",
168
+ UserData: userDataB64,
169
+ BlockDeviceMappings: [
170
+ {
171
+ DeviceName: "/dev/xvda",
172
+ Ebs: {
173
+ VolumeSize: p.config.rootVolumeGb,
174
+ VolumeType: "gp3",
175
+ DeleteOnTermination: true,
176
+ },
177
+ },
178
+ ],
179
+ TagSpecifications: [
180
+ {
181
+ ResourceType: "instance",
182
+ Tags: [
183
+ { Key: "Project", Value: "ralph" },
184
+ { Key: "Name", Value: "ralph-harness" },
185
+ { Key: "LaunchedAt", Value: new Date().toISOString() },
186
+ {
187
+ Key: "MaxLifetimeMin",
188
+ Value: String(p.config.maxLifetimeMin),
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ ResourceType: "volume",
194
+ Tags: [
195
+ { Key: "Project", Value: "ralph" },
196
+ { Key: "LaunchedAt", Value: new Date().toISOString() },
197
+ {
198
+ Key: "MaxLifetimeMin",
199
+ Value: String(p.config.maxLifetimeMin),
200
+ },
201
+ ],
202
+ },
203
+ ],
204
+ MetadataOptions: {
205
+ HttpTokens: "required",
206
+ HttpEndpoint: "enabled",
207
+ HttpPutResponseHopLimit: 2,
208
+ },
209
+ MinCount: 1,
210
+ MaxCount: 1,
211
+ }));
212
+ const inst = r.Instances?.[0]?.InstanceId;
213
+ if (!inst) {
214
+ throw new LauncherError(1, moduleErr("run-instances did not return an instance id"));
215
+ }
216
+ // Network interfaces.SubnetId conflicts with top-level SubnetId in some
217
+ // SDK versions. The above call works on @aws-sdk/client-ec2 >= 3.700.
218
+ return inst;
219
+ }
220
+ const realSleep = (ms) => new Promise((r) => setTimeout(r, ms));
221
+ const realNow = () => Date.now();
222
+ // waitForTerminated — polls describe-instances until State.Name=terminated.
223
+ // Returns 0 on clean termination, 3 on wall-clock ceiling breach (after
224
+ // firing terminate-instances on best-effort).
225
+ export async function waitForTerminated(clients, opts) {
226
+ const now = opts.now ?? realNow;
227
+ const sleep = opts.sleep ?? realSleep;
228
+ const deadline = now() + opts.config.maxLifetimeMin * 60_000;
229
+ for (;;) {
230
+ let state = "";
231
+ try {
232
+ const r = await clients.ec2.send(new DescribeInstancesCommand({ InstanceIds: [opts.instanceId] }));
233
+ state = r.Reservations?.[0]?.Instances?.[0]?.State?.Name ?? "";
234
+ }
235
+ catch {
236
+ state = "";
237
+ }
238
+ if (state === "terminated") {
239
+ opts.info(moduleInfo(`instance ${opts.instanceId} terminated`));
240
+ return 0;
241
+ }
242
+ if (state.length === 0) {
243
+ opts.info(moduleInfo(`could not read state for ${opts.instanceId}; retrying`));
244
+ }
245
+ else {
246
+ opts.info(moduleInfo(`instance ${opts.instanceId} state=${state}`));
247
+ }
248
+ if (now() >= deadline) {
249
+ opts.info(`${MODULE_PREFIX}: error: wall-clock ceiling (${opts.config.maxLifetimeMin}m) breached; forcing terminate`);
250
+ try {
251
+ await clients.ec2.send(new TerminateInstancesCommand({ InstanceIds: [opts.instanceId] }));
252
+ }
253
+ catch {
254
+ // best-effort — propagate the ceiling breach as the rc anyway
255
+ }
256
+ return 3;
257
+ }
258
+ await sleep(opts.config.pollIntervalSec * 1_000);
259
+ }
260
+ }
261
+ const stdoutInfo = (line) => process.stdout.write(`${line}\n`);
262
+ // run — full launch path. Returns the wait_for_terminated exit code (0 or 3).
263
+ // On any pre-launch failure, throws LauncherError with the matching exit code.
264
+ export async function run(opts) {
265
+ const env = opts.env ?? process.env;
266
+ const info = opts.info ?? stdoutInfo;
267
+ const config = resolveLauncherConfig(env, opts.defaultHarnessVersion);
268
+ const clients = opts.clients ?? defaultAwsClients(config.region);
269
+ const vpcId = await resolveDefaultVpc(clients);
270
+ const subnetId = await resolvePublicSubnet(clients, vpcId);
271
+ const sgId = await resolveSecurityGroup(clients, vpcId, config.sgName);
272
+ const imageId = await resolveImageId(clients, config.amiSsmParam);
273
+ info(moduleInfo(`region=${config.region} vpc=${vpcId} subnet=${subnetId} sg=${sgId} ami=${imageId}`));
274
+ info(moduleInfo(`instance_type=${config.instanceType} root_gb=${config.rootVolumeGb} max_lifetime_min=${config.maxLifetimeMin}`));
275
+ info(moduleInfo(`target=${config.targetRepo} log_group=${config.logGroup} version=${config.harnessVersion}`));
276
+ const userData = opts.userDataOverride ??
277
+ renderUserData({
278
+ targetRepo: config.targetRepo,
279
+ harnessVersion: config.harnessVersion,
280
+ awsRegion: config.region,
281
+ logGroup: config.logGroup,
282
+ githubTokenSsmKey: config.githubTokenSsmKey,
283
+ claudeOauthSsmKey: config.claudeOauthSsmKey,
284
+ agentStuckLabel: config.agentStuckLabel,
285
+ extraEnv: env.RALPH_DEBUG_TRANSCRIPT === "1"
286
+ ? { RALPH_DEBUG_TRANSCRIPT: "1" }
287
+ : undefined,
288
+ });
289
+ info(moduleInfo(`user-data size: ${Buffer.byteLength(userData, "utf8")} bytes (cap=16384)`));
290
+ const instanceId = await runInstance(clients, {
291
+ config,
292
+ imageId,
293
+ subnetId,
294
+ sgId,
295
+ userData,
296
+ });
297
+ info(moduleInfo(`launched ${instanceId}`));
298
+ info(moduleInfo(`log_group=${config.logGroup} log_stream=${instanceId}`));
299
+ info(moduleInfo(`tail with: aws --region ${config.region} logs tail ${config.logGroup} --log-stream-names ${instanceId} --follow`));
300
+ const waitRc = await waitForTerminated(clients, {
301
+ config,
302
+ instanceId,
303
+ info,
304
+ now: opts.now,
305
+ sleep: opts.sleep,
306
+ });
307
+ // Post-hoc agent-stuck check. Runs unconditionally so a wall-clock
308
+ // breach (rc=3) still gets the post-hoc correlation.
309
+ await postHocCheck({
310
+ clients,
311
+ targetRepo: config.targetRepo,
312
+ launchTag: instanceId,
313
+ instanceId,
314
+ logGroup: config.logGroup,
315
+ agentStuckLabel: config.agentStuckLabel,
316
+ info,
317
+ });
318
+ return waitRc;
319
+ }
320
+ //# sourceMappingURL=fire-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire-launcher.js","sourceRoot":"","sources":["../../src/lib/fire-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface GhResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ exitCode: number;
5
+ }
6
+ export declare class GhRunnerError extends Error {
7
+ readonly exitCode: number;
8
+ readonly stderr: string;
9
+ constructor(exitCode: number, stderr: string, message: string);
10
+ }
11
+ export declare function runGh(args: readonly string[]): GhResult;
12
+ export declare function runGhJson<T = unknown>(args: readonly string[]): T;
13
+ //# sourceMappingURL=gh-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh-runner.d.ts","sourceRoot":"","sources":["../../src/lib/gh-runner.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAc,SAAQ,KAAK;aAEpB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;gBADd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CA0BvD;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAYjE"}