@galaxy-foundry/gxwf-pi-harness 0.0.0 → 0.3.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.
@@ -0,0 +1,188 @@
1
+ import { spawn } from "node:child_process";
2
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import path from "node:path";
5
+ import process from "node:process";
6
+ import { createInterface } from "node:readline/promises";
7
+ import { ModelRuntime } from "@earendil-works/pi-coding-agent";
8
+ export const PI_TEST_AUTH_PROVIDER = "openai-codex";
9
+ export function defaultPiTestAuthDir(env = process.env, home = homedir()) {
10
+ const configRoot = env.XDG_CONFIG_HOME && path.isAbsolute(env.XDG_CONFIG_HOME)
11
+ ? env.XDG_CONFIG_HOME
12
+ : path.join(home, ".config");
13
+ return path.join(configRoot, "galaxy-foundry", "pi-test-auth");
14
+ }
15
+ export function piTestAuthPath(authDir = defaultPiTestAuthDir()) {
16
+ return path.join(path.resolve(authDir), "auth.json");
17
+ }
18
+ export function inspectPiTestAuth(authDir = defaultPiTestAuthDir()) {
19
+ const resolvedAuthDir = path.resolve(authDir);
20
+ const authPath = piTestAuthPath(resolvedAuthDir);
21
+ if (!existsSync(authPath)) {
22
+ return {
23
+ auth_dir: resolvedAuthDir,
24
+ provider: PI_TEST_AUTH_PROVIDER,
25
+ configured: false,
26
+ };
27
+ }
28
+ let data;
29
+ try {
30
+ data = JSON.parse(readFileSync(authPath, "utf8"));
31
+ }
32
+ catch {
33
+ return {
34
+ auth_dir: resolvedAuthDir,
35
+ provider: PI_TEST_AUTH_PROVIDER,
36
+ configured: false,
37
+ problem: "auth.json is unreadable or invalid JSON",
38
+ };
39
+ }
40
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
41
+ return {
42
+ auth_dir: resolvedAuthDir,
43
+ provider: PI_TEST_AUTH_PROVIDER,
44
+ configured: false,
45
+ problem: "invalid auth store: expected a JSON object",
46
+ };
47
+ }
48
+ const credential = data[PI_TEST_AUTH_PROVIDER];
49
+ if (!credential) {
50
+ return {
51
+ auth_dir: resolvedAuthDir,
52
+ provider: PI_TEST_AUTH_PROVIDER,
53
+ configured: false,
54
+ };
55
+ }
56
+ if (typeof credential !== "object" || Array.isArray(credential)) {
57
+ return {
58
+ auth_dir: resolvedAuthDir,
59
+ provider: PI_TEST_AUTH_PROVIDER,
60
+ configured: false,
61
+ problem: `invalid credential for ${PI_TEST_AUTH_PROVIDER}`,
62
+ };
63
+ }
64
+ const fields = credential;
65
+ if (fields.type !== "oauth") {
66
+ return {
67
+ auth_dir: resolvedAuthDir,
68
+ provider: PI_TEST_AUTH_PROVIDER,
69
+ configured: false,
70
+ type: fields.type === "api_key" ? "api_key" : undefined,
71
+ problem: `expected an OAuth credential for ${PI_TEST_AUTH_PROVIDER}`,
72
+ };
73
+ }
74
+ if (typeof fields.access !== "string" ||
75
+ typeof fields.refresh !== "string" ||
76
+ typeof fields.expires !== "number" ||
77
+ !Number.isFinite(fields.expires)) {
78
+ return {
79
+ auth_dir: resolvedAuthDir,
80
+ provider: PI_TEST_AUTH_PROVIDER,
81
+ configured: false,
82
+ type: "oauth",
83
+ problem: `invalid OAuth credential for ${PI_TEST_AUTH_PROVIDER}`,
84
+ };
85
+ }
86
+ return {
87
+ auth_dir: resolvedAuthDir,
88
+ provider: PI_TEST_AUTH_PROVIDER,
89
+ configured: true,
90
+ type: "oauth",
91
+ account_id: typeof fields.accountId === "string" ? fields.accountId : undefined,
92
+ expires_at: fields.expires > 0 ? new Date(fields.expires).toISOString() : undefined,
93
+ };
94
+ }
95
+ function openBrowser(url) {
96
+ const command = process.platform === "darwin"
97
+ ? { bin: "open", args: [url] }
98
+ : process.platform === "win32"
99
+ ? { bin: "cmd", args: ["/c", "start", "", url] }
100
+ : { bin: "xdg-open", args: [url] };
101
+ const child = spawn(command.bin, command.args, {
102
+ detached: true,
103
+ stdio: "ignore",
104
+ });
105
+ child.on("error", () => undefined);
106
+ child.unref();
107
+ }
108
+ async function askInTerminal(prompt) {
109
+ if (!process.stdin.isTTY) {
110
+ throw new Error(`${prompt.message}: interactive input requires a terminal`);
111
+ }
112
+ const terminal = createInterface({ input: process.stdin, output: process.stderr });
113
+ try {
114
+ return await terminal.question(`${prompt.message} `, { signal: prompt.signal });
115
+ }
116
+ finally {
117
+ terminal.close();
118
+ }
119
+ }
120
+ export function createPiTestAuthInteraction(options) {
121
+ const write = options.write ?? ((message) => process.stderr.write(`${message}\n`));
122
+ const external = options.openExternal ?? openBrowser;
123
+ const ask = options.ask ?? askInTerminal;
124
+ return {
125
+ async prompt(prompt) {
126
+ if (prompt.type === "select") {
127
+ const id = options.loginMethod;
128
+ if (!prompt.options.some((option) => option.id === id)) {
129
+ throw new Error(`Pi OAuth flow does not offer login method '${id}'`);
130
+ }
131
+ return id;
132
+ }
133
+ return ask(prompt);
134
+ },
135
+ notify(event) {
136
+ if (event.type === "auth_url") {
137
+ write(`Open this URL to authenticate:\n${event.url}`);
138
+ if (event.instructions)
139
+ write(event.instructions);
140
+ if (options.openBrowser)
141
+ external(event.url);
142
+ }
143
+ else if (event.type === "device_code") {
144
+ write(`Open ${event.verificationUri} and enter code ${event.userCode}`);
145
+ if (options.openBrowser)
146
+ external(event.verificationUri);
147
+ }
148
+ else if (event.type === "info") {
149
+ write(event.message);
150
+ for (const link of event.links ?? [])
151
+ write(`${link.label ?? "More information"}: ${link.url}`);
152
+ }
153
+ else {
154
+ write(event.message);
155
+ }
156
+ },
157
+ };
158
+ }
159
+ export class PiTestAuthManager {
160
+ authDir;
161
+ createRuntime;
162
+ constructor(authDir = defaultPiTestAuthDir(), dependencies = {}) {
163
+ this.authDir = path.resolve(authDir);
164
+ this.createRuntime = dependencies.createRuntime ?? ((options) => ModelRuntime.create(options));
165
+ }
166
+ status() {
167
+ return inspectPiTestAuth(this.authDir);
168
+ }
169
+ async login(options) {
170
+ mkdirSync(this.authDir, { recursive: true, mode: 0o700 });
171
+ const runtime = await this.createRuntime({
172
+ authPath: piTestAuthPath(this.authDir),
173
+ refreshOnCreate: false,
174
+ });
175
+ await runtime.login(PI_TEST_AUTH_PROVIDER, "oauth", createPiTestAuthInteraction(options));
176
+ return this.status();
177
+ }
178
+ async logout() {
179
+ if (!existsSync(piTestAuthPath(this.authDir)))
180
+ return;
181
+ const runtime = await this.createRuntime({
182
+ authPath: piTestAuthPath(this.authDir),
183
+ refreshOnCreate: false,
184
+ });
185
+ await runtime.logout(PI_TEST_AUTH_PROVIDER);
186
+ }
187
+ }
188
+ //# sourceMappingURL=pi-test-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-test-auth.js","sourceRoot":"","sources":["../src/pi-test-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import { type JsonAgentSessionEvent, type RpcClientOptions, type RpcSessionState, type SessionStats } from "@earendil-works/pi-coding-agent";
2
+ import { type ContainerImageResolution, type ContainerMount, type ContainerNetworkPolicy } from "./container.js";
3
+ export type SandboxMode = "local" | "container";
4
+ export type RunStatus = "passed" | "failed" | "error" | "timed_out" | "cancelled";
5
+ export type PiThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
6
+ export interface ExpectedArtifact {
7
+ id: string;
8
+ path: string;
9
+ optional?: boolean;
10
+ }
11
+ export interface StagedInput {
12
+ source: string;
13
+ staged_path: string;
14
+ sha256: string;
15
+ }
16
+ export interface ArtifactResult {
17
+ id: string;
18
+ path: string;
19
+ status: "passed" | "present" | "missing" | "failed" | "error";
20
+ sha256?: string;
21
+ validator?: {
22
+ bin: string;
23
+ args: string[];
24
+ exit_code: number | null;
25
+ stdout_path: string;
26
+ stderr_path: string;
27
+ error?: string;
28
+ };
29
+ }
30
+ export interface PiSkillRunRecord {
31
+ run_schema_version: 1;
32
+ run_id: string;
33
+ status: RunStatus;
34
+ failure_kind?: "infrastructure" | "skill";
35
+ error?: string;
36
+ started_at: string;
37
+ finished_at: string;
38
+ duration_ms: number;
39
+ engine: {
40
+ name: "pi";
41
+ version: string;
42
+ provider: string;
43
+ requested_model: string;
44
+ requested_thinking?: PiThinkingLevel;
45
+ resolved_model?: string;
46
+ };
47
+ invocation: {
48
+ skill: string;
49
+ skill_path: string;
50
+ skill_sha256: string;
51
+ provenance_sha256?: string;
52
+ prompt_sha256: string;
53
+ explicit_activation: string;
54
+ tools: string[];
55
+ timeout_ms: number;
56
+ ambient_discovery_disabled: true;
57
+ };
58
+ sandbox: {
59
+ mode: "local";
60
+ security_boundary: false;
61
+ network_policy: "host";
62
+ credential_policy: "ambient-environment";
63
+ credential_auth_store: "pi-test-auth" | "none";
64
+ workdir: string;
65
+ agent_config_dir: string;
66
+ } | {
67
+ mode: "container";
68
+ security_boundary: true;
69
+ network_policy: ContainerNetworkPolicy;
70
+ credential_policy: "allowlisted-environment" | "none";
71
+ credential_env: string[];
72
+ workdir: "/workspace";
73
+ agent_config_dir: "/pi-agent";
74
+ image: ContainerImageResolution;
75
+ mounts: ContainerMount[];
76
+ container_name: string;
77
+ };
78
+ inputs: StagedInput[];
79
+ artifacts: ArtifactResult[];
80
+ usage?: {
81
+ input_tokens: number;
82
+ output_tokens: number;
83
+ cache_read_tokens: number;
84
+ cache_write_tokens: number;
85
+ total_tokens: number;
86
+ cost: number;
87
+ turns: number;
88
+ tool_calls: number;
89
+ };
90
+ final_output?: string;
91
+ trace_path: string;
92
+ stderr_path: string;
93
+ }
94
+ export interface RunPiSkillOptions {
95
+ skillDir: string;
96
+ prompt: string;
97
+ inputPaths?: string[];
98
+ expectedArtifacts?: ExpectedArtifact[];
99
+ runDir: string;
100
+ provider: string;
101
+ model: string;
102
+ thinking?: PiThinkingLevel;
103
+ timeoutMs?: number;
104
+ tools?: string[];
105
+ sandbox?: SandboxMode;
106
+ sandboxImage?: string;
107
+ sandboxNetwork?: ContainerNetworkPolicy;
108
+ credentialEnv?: string[];
109
+ piTestAuthDir?: string;
110
+ dockerBin?: string;
111
+ signal?: AbortSignal;
112
+ onEvent?: (event: JsonAgentSessionEvent) => void;
113
+ }
114
+ interface PiClient {
115
+ start(): Promise<void>;
116
+ stop(): Promise<void>;
117
+ abort(): Promise<void>;
118
+ onEvent(listener: (event: JsonAgentSessionEvent) => void): () => void;
119
+ promptAndWait(message: string, images?: never, timeout?: number): Promise<JsonAgentSessionEvent[]>;
120
+ getStderr(): string;
121
+ getState(): Promise<RpcSessionState>;
122
+ getSessionStats(): Promise<SessionStats>;
123
+ getLastAssistantText(): Promise<string | null>;
124
+ }
125
+ export interface PiRunnerDependencies {
126
+ createClient?: (options: RpcClientOptions) => PiClient;
127
+ inspectContainerImage?: (image: string, dockerBin: string) => ContainerImageResolution;
128
+ now?: () => Date;
129
+ id?: () => string;
130
+ }
131
+ export declare function sha256Path(filePath: string): string;
132
+ export declare function expectedArtifactsFromSkill(skillDir: string): ExpectedArtifact[];
133
+ export declare function runPiSkill(options: RunPiSkillOptions, dependencies?: PiRunnerDependencies): Promise<PiSkillRunRecord>;
134
+ export {};
135
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}