@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.
- package/Dockerfile +19 -0
- package/LICENSE +1 -1
- package/README.md +44 -2
- package/dist/container-rpc-entry.d.ts +2 -0
- package/dist/container-rpc-entry.d.ts.map +1 -0
- package/dist/container-rpc-entry.js +37 -0
- package/dist/container-rpc-entry.js.map +1 -0
- package/dist/container.d.ts +33 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +101 -0
- package/dist/container.js.map +1 -0
- package/dist/extension.d.ts +3 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +116 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/pi-test-auth.d.ts +45 -0
- package/dist/pi-test-auth.d.ts.map +1 -0
- package/dist/pi-test-auth.js +188 -0
- package/dist/pi-test-auth.js.map +1 -0
- package/dist/runner.d.ts +135 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +556 -0
- package/dist/runner.js.map +1 -0
- package/dist/skill-resolution.d.ts +3 -0
- package/dist/skill-resolution.d.ts.map +1 -0
- package/dist/skill-resolution.js +25 -0
- package/dist/skill-resolution.js.map +1 -0
- package/package.json +49 -4
|
@@ -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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"}
|
package/dist/runner.d.ts
ADDED
|
@@ -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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"}
|