@goah/cli 0.1.1
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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +137 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +231 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { discardWorkspaceRef, inspectWorkspaceRef, recoverWorkspaceRef } from "goah-supervisor";
|
|
5
|
+
import { createRuntime, diagnoseConfig, loadConfig, statusSnapshot, SupervisorLock, writeDefaultConfig } from "./index.js";
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
try {
|
|
8
|
+
await main();
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
}
|
|
14
|
+
async function main() {
|
|
15
|
+
const command = args[0] ?? "help";
|
|
16
|
+
const configPath = option("--config") ?? "goah.config.json";
|
|
17
|
+
if (command === "help") {
|
|
18
|
+
printHelp();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (command === "init") {
|
|
22
|
+
const provider = providerOption(option("--provider") ?? "anthropic");
|
|
23
|
+
writeDefaultConfig(configPath, {
|
|
24
|
+
provider,
|
|
25
|
+
...(option("--model") ? { model: option("--model") } : {}),
|
|
26
|
+
...(option("--api-key-env") ? { apiKeyEnv: option("--api-key-env") } : {}),
|
|
27
|
+
...(option("--agent") ? { agent: option("--agent") } : {}),
|
|
28
|
+
...(option("--context-window-tokens") ? { contextWindowTokens: numberOption("--context-window-tokens") } : {}),
|
|
29
|
+
...(option("--max-output-tokens") ? { maxOutputTokensPerTurn: numberOption("--max-output-tokens") } : {}),
|
|
30
|
+
...(option("--base-url") ? { baseUrl: option("--base-url") } : {}),
|
|
31
|
+
});
|
|
32
|
+
console.log(JSON.stringify({ created: configPath, provider }, null, 2));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const config = loadConfig(configPath, { resolveSecrets: command !== "doctor" });
|
|
36
|
+
if (command === "doctor") {
|
|
37
|
+
const result = diagnoseConfig(config);
|
|
38
|
+
console.log(JSON.stringify(result, null, 2));
|
|
39
|
+
if (!result.ok)
|
|
40
|
+
process.exitCode = 1;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const lock = mutates(command) ? new SupervisorLock(config.stateDir) : null;
|
|
44
|
+
lock?.acquire();
|
|
45
|
+
let runtime = null;
|
|
46
|
+
try {
|
|
47
|
+
runtime = createRuntime(config);
|
|
48
|
+
const { ledger, supervisor } = runtime;
|
|
49
|
+
if (command === "start") {
|
|
50
|
+
const controller = new AbortController();
|
|
51
|
+
const stop = () => controller.abort();
|
|
52
|
+
process.on("SIGINT", stop);
|
|
53
|
+
process.on("SIGTERM", stop);
|
|
54
|
+
await run(supervisor, controller.signal);
|
|
55
|
+
}
|
|
56
|
+
else if (command === "run-once") {
|
|
57
|
+
await supervisor.recover();
|
|
58
|
+
console.log(JSON.stringify({ wake: await supervisor.tick() }, null, 2));
|
|
59
|
+
}
|
|
60
|
+
else if (command === "wake") {
|
|
61
|
+
const agent = requiredPositional(1, "agent");
|
|
62
|
+
const wake = supervisor.planWake(agent, new Date().toISOString(), option("--reason") ?? "manual wake", "supervisor");
|
|
63
|
+
console.log(JSON.stringify({ wake }, null, 2));
|
|
64
|
+
}
|
|
65
|
+
else if (command === "status") {
|
|
66
|
+
console.log(JSON.stringify(statusSnapshot(ledger), null, 2));
|
|
67
|
+
}
|
|
68
|
+
else if (command === "goal-list")
|
|
69
|
+
console.log(JSON.stringify(ledger.goals(), null, 2));
|
|
70
|
+
else if (command === "goal-create") {
|
|
71
|
+
const id = required("--id");
|
|
72
|
+
const owner = required("--owner");
|
|
73
|
+
const objective = required("--objective");
|
|
74
|
+
const target = Number(option("--target") ?? 1);
|
|
75
|
+
const goal = { id, parentId: option("--parent"), objective, owner, phase: "active", revision: 0, target, budget: null, metric: { source: option("--metric-source") ?? id, window: option("--window") ?? "latest", direction: "at_least", target, freshnessMs: Number(option("--freshness-ms") ?? 86_400_000), onMissing: "wake_owner", onStale: "wake_owner" } };
|
|
76
|
+
supervisor.createGoal(goal, option("--actor") ?? "human");
|
|
77
|
+
const wake = flag("--wake-now") ? supervisor.planWake(owner, new Date().toISOString(), `goal:${id}`, "supervisor") : null;
|
|
78
|
+
console.log(JSON.stringify({ goal, wake }, null, 2));
|
|
79
|
+
}
|
|
80
|
+
else if (command === "action-list")
|
|
81
|
+
console.log(JSON.stringify(ledger.actions(), null, 2));
|
|
82
|
+
else if (command === "approve")
|
|
83
|
+
console.log(JSON.stringify(await supervisor.approveAction(requiredPositional(1, "action id"), option("--actor") ?? "human", required("--reason"), evidence()), null, 2));
|
|
84
|
+
else if (command === "reject")
|
|
85
|
+
console.log(JSON.stringify(supervisor.rejectAction(requiredPositional(1, "action id"), option("--actor") ?? "human", required("--reason"), evidence()), null, 2));
|
|
86
|
+
else if (command === "dashboard") {
|
|
87
|
+
const path = option("--output") ?? join(config.stateDir, "status.html");
|
|
88
|
+
writeFileSync(path, (await import("goah-supervisor")).renderDashboard(ledger));
|
|
89
|
+
console.log(path);
|
|
90
|
+
}
|
|
91
|
+
else if (command === "workspace-inspect")
|
|
92
|
+
console.log(inspectWorkspaceRef(config.workspace, requiredPositional(1, "workspace ref")));
|
|
93
|
+
else if (command === "workspace-recover")
|
|
94
|
+
console.log(recoverWorkspaceRef(config.workspace, requiredPositional(1, "workspace ref"), required("--branch")));
|
|
95
|
+
else if (command === "workspace-discard") {
|
|
96
|
+
if (option("--yes") !== "true")
|
|
97
|
+
throw new Error("workspace-discard requires --yes true");
|
|
98
|
+
discardWorkspaceRef(config.workspace, requiredPositional(1, "workspace ref"));
|
|
99
|
+
console.log("discarded");
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
throw new Error(`unknown command: ${command}`);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
runtime?.ledger.close();
|
|
106
|
+
lock?.release();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function run(supervisor, signal) {
|
|
110
|
+
const { runSupervisorDaemon } = await import("goah-supervisor");
|
|
111
|
+
await runSupervisorDaemon(supervisor, { signal });
|
|
112
|
+
}
|
|
113
|
+
function printHelp() {
|
|
114
|
+
console.log(`goah init [--provider anthropic|openai|ark-coding|faux] [--model ID]
|
|
115
|
+
goah doctor
|
|
116
|
+
goah goal-create --id ID --owner AGENT --objective TEXT [--wake-now]
|
|
117
|
+
goah wake AGENT [--reason TEXT]
|
|
118
|
+
goah run-once
|
|
119
|
+
goah start | status | goal-list | action-list | approve | reject | dashboard
|
|
120
|
+
goah workspace-inspect | workspace-recover | workspace-discard`);
|
|
121
|
+
}
|
|
122
|
+
function option(name) { const index = args.indexOf(name); return index >= 0 ? args[index + 1] ?? null : null; }
|
|
123
|
+
function flag(name) { return args.includes(name); }
|
|
124
|
+
function required(name) { const value = option(name); if (!value)
|
|
125
|
+
throw new Error(`${name} is required`); return value; }
|
|
126
|
+
function numberOption(name) { const value = Number(required(name)); if (!Number.isInteger(value) || value <= 0)
|
|
127
|
+
throw new Error(`${name} must be a positive integer`); return value; }
|
|
128
|
+
function requiredPositional(index, label) { const value = args[index]; if (!value || value.startsWith("--"))
|
|
129
|
+
throw new Error(`${label} is required`); return value; }
|
|
130
|
+
function evidence() { return required("--evidence").split(",").map(Number); }
|
|
131
|
+
function providerOption(value) {
|
|
132
|
+
if (!["anthropic", "openai", "ark-coding", "faux"].includes(value))
|
|
133
|
+
throw new Error(`unsupported provider: ${value}`);
|
|
134
|
+
return value;
|
|
135
|
+
}
|
|
136
|
+
function mutates(command) { return ["start", "run-once", "wake", "goal-create", "approve", "reject", "workspace-recover", "workspace-discard"].includes(command); }
|
|
137
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { CONTRACT_VERSION, type AgentProfile, type ConnectorManifest, type MetricProcessSpec, type RunLimits } from "goah-ledger-contract";
|
|
2
|
+
import { SqliteLedger } from "goah-ledger-sqlite";
|
|
3
|
+
import { Supervisor } from "goah-supervisor";
|
|
4
|
+
export interface GoahConfig {
|
|
5
|
+
version: 1;
|
|
6
|
+
workspace: string;
|
|
7
|
+
stateDir: string;
|
|
8
|
+
runner: {
|
|
9
|
+
command: string;
|
|
10
|
+
args: string[];
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
inheritEnv?: string[];
|
|
13
|
+
};
|
|
14
|
+
limits?: RunLimits;
|
|
15
|
+
profiles?: AgentProfile[];
|
|
16
|
+
approvers?: string[];
|
|
17
|
+
auditWriters?: string[];
|
|
18
|
+
heartbeatPolicies?: Array<{
|
|
19
|
+
agent: string;
|
|
20
|
+
maxSilentMs: number;
|
|
21
|
+
escalateTo: string;
|
|
22
|
+
since?: string;
|
|
23
|
+
}>;
|
|
24
|
+
retryPolicy?: {
|
|
25
|
+
maxAttempts: number;
|
|
26
|
+
baseDelayMs: number;
|
|
27
|
+
};
|
|
28
|
+
verifyMetricsAfterWake?: boolean;
|
|
29
|
+
connectors?: Array<{
|
|
30
|
+
manifest: ConnectorManifest;
|
|
31
|
+
command: string;
|
|
32
|
+
args: string[];
|
|
33
|
+
env?: Record<string, string>;
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
}>;
|
|
36
|
+
metrics?: Array<{
|
|
37
|
+
goalId: string;
|
|
38
|
+
intervalMs: number;
|
|
39
|
+
process: MetricProcessSpec;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export type PiProvider = "anthropic" | "openai" | "ark-coding" | "faux";
|
|
43
|
+
export interface InitOptions {
|
|
44
|
+
provider?: PiProvider;
|
|
45
|
+
model?: string;
|
|
46
|
+
apiKeyEnv?: string;
|
|
47
|
+
agent?: string;
|
|
48
|
+
contextWindowTokens?: number;
|
|
49
|
+
maxOutputTokensPerTurn?: number;
|
|
50
|
+
baseUrl?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface DoctorCheck {
|
|
53
|
+
name: string;
|
|
54
|
+
ok: boolean;
|
|
55
|
+
detail: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function loadConfig(path?: string, options?: {
|
|
58
|
+
resolveSecrets?: boolean;
|
|
59
|
+
}): GoahConfig;
|
|
60
|
+
export declare function createRuntime(config: GoahConfig): {
|
|
61
|
+
ledger: SqliteLedger;
|
|
62
|
+
supervisor: Supervisor;
|
|
63
|
+
};
|
|
64
|
+
export declare function defaultConfig(_directory: string, options?: InitOptions): GoahConfig;
|
|
65
|
+
export declare class SupervisorLock {
|
|
66
|
+
#private;
|
|
67
|
+
readonly path: string;
|
|
68
|
+
constructor(stateDir: string);
|
|
69
|
+
acquire(): void;
|
|
70
|
+
release(): void;
|
|
71
|
+
}
|
|
72
|
+
export declare function writeDefaultConfig(path?: string, options?: InitOptions): void;
|
|
73
|
+
export declare function diagnoseConfig(config: GoahConfig): {
|
|
74
|
+
ok: boolean;
|
|
75
|
+
checks: DoctorCheck[];
|
|
76
|
+
};
|
|
77
|
+
export declare function statusSnapshot(ledger: SqliteLedger, now?: string): object;
|
|
78
|
+
export { CONTRACT_VERSION };
|
|
79
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { accessSync, constants, existsSync, mkdirSync, openSync, closeSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { DatabaseSync } from "node:sqlite";
|
|
5
|
+
import { CONTRACT_VERSION, assertRunLimits, evaluateMetric } from "goah-ledger-contract";
|
|
6
|
+
import { SQLITE_SCHEMA_VERSION, SqliteLedger } from "goah-ledger-sqlite";
|
|
7
|
+
import { createPiModel, piWorkerPath, ProcessRunner } from "goah-runner-pi";
|
|
8
|
+
import { GitWorkspaceManager, Supervisor } from "goah-supervisor";
|
|
9
|
+
export function loadConfig(path = "goah.config.json", options = {}) {
|
|
10
|
+
const absolute = resolve(path);
|
|
11
|
+
const config = JSON.parse(readFileSync(absolute, "utf8"));
|
|
12
|
+
if (config.version !== 1)
|
|
13
|
+
throw new Error(`unsupported goah config version: ${String(config.version)}`);
|
|
14
|
+
const base = dirname(absolute);
|
|
15
|
+
config.workspace = absolutePath(base, config.workspace);
|
|
16
|
+
config.stateDir = absolutePath(base, config.stateDir);
|
|
17
|
+
config.runner.command = resolveCommand(config.runner.command);
|
|
18
|
+
config.runner.args = config.runner.args.map((arg) => arg === "$GOAH_PI_WORKER" ? piWorkerPath() : arg);
|
|
19
|
+
if (options.resolveSecrets !== false)
|
|
20
|
+
config.runner.env = resolveEnv(config.runner.env);
|
|
21
|
+
for (const connector of config.connectors ?? []) {
|
|
22
|
+
connector.command = resolveCommand(connector.command);
|
|
23
|
+
if (options.resolveSecrets !== false)
|
|
24
|
+
connector.env = resolveEnv(connector.env);
|
|
25
|
+
}
|
|
26
|
+
for (const metric of config.metrics ?? []) {
|
|
27
|
+
metric.process.command = resolveCommand(metric.process.command);
|
|
28
|
+
if (options.resolveSecrets !== false)
|
|
29
|
+
metric.process.env = resolveEnv(metric.process.env);
|
|
30
|
+
}
|
|
31
|
+
return config;
|
|
32
|
+
}
|
|
33
|
+
export function createRuntime(config) {
|
|
34
|
+
if (config.limits)
|
|
35
|
+
assertRunLimits(config.limits);
|
|
36
|
+
mkdirSync(config.stateDir, { recursive: true });
|
|
37
|
+
const ledger = new SqliteLedger(join(config.stateDir, "ledger.sqlite"));
|
|
38
|
+
const runner = new ProcessRunner(config.runner);
|
|
39
|
+
const supervisor = new Supervisor(ledger, runner, new class {
|
|
40
|
+
now() { return new Date(); }
|
|
41
|
+
}(), {
|
|
42
|
+
workspace: new GitWorkspaceManager(config.workspace),
|
|
43
|
+
...(config.limits ? { limits: config.limits } : {}),
|
|
44
|
+
...(config.profiles ? { profiles: config.profiles } : {}),
|
|
45
|
+
...(config.approvers ? { approvers: config.approvers } : {}),
|
|
46
|
+
...(config.auditWriters ? { auditWriters: config.auditWriters } : {}),
|
|
47
|
+
...(config.heartbeatPolicies ? { heartbeatPolicies: config.heartbeatPolicies } : {}),
|
|
48
|
+
...(config.retryPolicy ? { retryPolicy: config.retryPolicy } : {}),
|
|
49
|
+
...(config.verifyMetricsAfterWake !== undefined ? { verifyMetricsAfterWake: config.verifyMetricsAfterWake } : {}),
|
|
50
|
+
});
|
|
51
|
+
for (const connector of config.connectors ?? [])
|
|
52
|
+
supervisor.registerConnector(connector);
|
|
53
|
+
for (const metric of config.metrics ?? [])
|
|
54
|
+
supervisor.registerMetricCollector(metric.goalId, metric.process, metric.intervalMs);
|
|
55
|
+
return { ledger, supervisor };
|
|
56
|
+
}
|
|
57
|
+
export function defaultConfig(_directory, options = {}) {
|
|
58
|
+
const provider = options.provider ?? "anthropic";
|
|
59
|
+
const model = options.model ?? defaultModel(provider);
|
|
60
|
+
const runnerEnv = providerEnvironment(provider, model, options);
|
|
61
|
+
return {
|
|
62
|
+
version: 1,
|
|
63
|
+
workspace: ".",
|
|
64
|
+
stateDir: ".goah",
|
|
65
|
+
runner: { command: process.execPath, args: ["$GOAH_PI_WORKER"], env: runnerEnv },
|
|
66
|
+
limits: { maxTotalTokens: 2_000_000, maxWallClockMs: 3_600_000, handoffReserveTokens: 96_000, handoffReserveWallClockMs: 120_000 },
|
|
67
|
+
profiles: [{ agent: options.agent ?? "worker", role: "child" }],
|
|
68
|
+
approvers: ["human", "ceo"],
|
|
69
|
+
auditWriters: ["verifier", "audit"],
|
|
70
|
+
retryPolicy: { maxAttempts: 2, baseDelayMs: 5_000 },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export class SupervisorLock {
|
|
74
|
+
path;
|
|
75
|
+
#owned = false;
|
|
76
|
+
constructor(stateDir) { this.path = join(stateDir, "supervisor.lock"); }
|
|
77
|
+
acquire() {
|
|
78
|
+
mkdirSync(dirname(this.path), { recursive: true });
|
|
79
|
+
if (existsSync(this.path)) {
|
|
80
|
+
const pid = Number(readFileSync(this.path, "utf8"));
|
|
81
|
+
if (Number.isInteger(pid) && alive(pid))
|
|
82
|
+
throw new Error(`supervisor already running with pid ${pid}`);
|
|
83
|
+
rmSync(this.path);
|
|
84
|
+
}
|
|
85
|
+
const fd = openSync(this.path, "wx");
|
|
86
|
+
writeFileSync(fd, String(process.pid));
|
|
87
|
+
closeSync(fd);
|
|
88
|
+
this.#owned = true;
|
|
89
|
+
}
|
|
90
|
+
release() { if (this.#owned) {
|
|
91
|
+
rmSync(this.path, { force: true });
|
|
92
|
+
this.#owned = false;
|
|
93
|
+
} }
|
|
94
|
+
}
|
|
95
|
+
export function writeDefaultConfig(path = "goah.config.json", options = {}) {
|
|
96
|
+
const absolute = resolve(path);
|
|
97
|
+
if (existsSync(absolute))
|
|
98
|
+
throw new Error(`${absolute} already exists`);
|
|
99
|
+
writeFileSync(absolute, `${JSON.stringify(defaultConfig(dirname(absolute), options), null, 2)}\n`);
|
|
100
|
+
}
|
|
101
|
+
export function diagnoseConfig(config) {
|
|
102
|
+
const checks = [];
|
|
103
|
+
const check = (name, fn) => {
|
|
104
|
+
try {
|
|
105
|
+
checks.push({ name, ok: true, detail: fn() });
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
checks.push({ name, ok: false, detail: error instanceof Error ? error.message : String(error) });
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
check("node", () => {
|
|
112
|
+
if (Number(process.versions.node.split(".")[0]) < 24)
|
|
113
|
+
throw new Error(`Node ${process.versions.node} is unsupported; require >=24`);
|
|
114
|
+
return process.versions.node;
|
|
115
|
+
});
|
|
116
|
+
check("workspace", () => {
|
|
117
|
+
const result = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], { cwd: config.workspace, encoding: "utf8" });
|
|
118
|
+
if (result.status !== 0 || result.stdout.trim() !== "true")
|
|
119
|
+
throw new Error(result.stderr.trim() || "workspace is not a Git repository");
|
|
120
|
+
return config.workspace;
|
|
121
|
+
});
|
|
122
|
+
check("state", () => {
|
|
123
|
+
const existing = nearestExisting(config.stateDir);
|
|
124
|
+
accessSync(existing, constants.W_OK);
|
|
125
|
+
const database = join(config.stateDir, "ledger.sqlite");
|
|
126
|
+
if (!existsSync(database))
|
|
127
|
+
return `${config.stateDir} (will create)`;
|
|
128
|
+
const db = new DatabaseSync(database, { readOnly: true });
|
|
129
|
+
try {
|
|
130
|
+
const version = db.prepare("PRAGMA user_version").get().user_version;
|
|
131
|
+
if (version > SQLITE_SCHEMA_VERSION)
|
|
132
|
+
throw new Error(`ledger schema ${version} is newer than supported schema ${SQLITE_SCHEMA_VERSION}`);
|
|
133
|
+
return `${database} (schema ${version}${version < SQLITE_SCHEMA_VERSION ? `, migrates to ${SQLITE_SCHEMA_VERSION}` : ""})`;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
db.close();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
check("limits", () => { assertRunLimits(config.limits ?? defaultConfig(config.workspace).limits); return JSON.stringify(config.limits); });
|
|
140
|
+
check("runner", () => {
|
|
141
|
+
accessSync(config.runner.command, constants.X_OK);
|
|
142
|
+
const workerArg = config.runner.args[0];
|
|
143
|
+
if (workerArg && isAbsolute(workerArg))
|
|
144
|
+
accessSync(workerArg, constants.R_OK);
|
|
145
|
+
const env = resolveEnv(config.runner.env);
|
|
146
|
+
const provider = requiredEnv(env, "GOAH_PI_PROVIDER");
|
|
147
|
+
const modelId = requiredEnv(env, "GOAH_PI_MODEL");
|
|
148
|
+
const model = createPiModel(provider, modelId, env).model;
|
|
149
|
+
const key = provider === "anthropic" ? "ANTHROPIC_API_KEY" : provider === "openai" ? "OPENAI_API_KEY" : provider === "ark-coding" ? "ARK_API_KEY" : null;
|
|
150
|
+
if (key && !env[key])
|
|
151
|
+
throw new Error(`${key} is missing`);
|
|
152
|
+
return `${provider}/${modelId} context=${model.contextWindow} output=${model.maxTokens}`;
|
|
153
|
+
});
|
|
154
|
+
return { ok: checks.every((item) => item.ok), checks };
|
|
155
|
+
}
|
|
156
|
+
export function statusSnapshot(ledger, now = new Date().toISOString()) {
|
|
157
|
+
const events = ledger.events();
|
|
158
|
+
const wakes = ledger.wakes().map((wake) => {
|
|
159
|
+
const wakeEvents = events.filter((event) => event.wakeId === wake.id);
|
|
160
|
+
const abnormal = [...wakeEvents].reverse().find((event) => event.kind === "wake.abnormal_reason");
|
|
161
|
+
const tokensUsed = wakeEvents.reduce((total, event) => total + assistantTokens(event.data), 0);
|
|
162
|
+
return { ...wake, tokensUsed, abnormalReason: abnormal ? field(abnormal.data, "reason") : null };
|
|
163
|
+
});
|
|
164
|
+
const goals = ledger.goals().map((goal) => ({ ...goal, evaluation: evaluateMetric(goal.metric, ledger.metricSamples(goal.id), now) }));
|
|
165
|
+
const handoffs = events.filter((event) => event.kind === "handoff.recorded").slice(-20).map((event) => ({ seq: event.seq, ts: event.ts, agent: event.agent, wakeId: event.wakeId, handoff: event.data }));
|
|
166
|
+
const modelCapabilities = [...events].reverse().find((event) => event.kind === "runner.model.capabilities")?.data ?? null;
|
|
167
|
+
return { seq: events.at(-1)?.seq ?? 0, goals, wakes, actions: ledger.actions(), modelCapabilities, recentHandoffs: handoffs };
|
|
168
|
+
}
|
|
169
|
+
function resolveEnv(env = {}) {
|
|
170
|
+
return Object.fromEntries(Object.entries(env).map(([key, value]) => {
|
|
171
|
+
if (!value.startsWith("env:"))
|
|
172
|
+
return [key, value];
|
|
173
|
+
const name = value.slice(4);
|
|
174
|
+
const resolved = process.env[name];
|
|
175
|
+
if (resolved === undefined)
|
|
176
|
+
throw new Error(`required environment variable is missing: ${name}`);
|
|
177
|
+
return [key, resolved];
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
function defaultModel(provider) {
|
|
181
|
+
if (provider === "anthropic")
|
|
182
|
+
return "claude-sonnet-4-6";
|
|
183
|
+
if (provider === "faux")
|
|
184
|
+
return "faux-goah";
|
|
185
|
+
throw new Error(`--model is required for provider ${provider}`);
|
|
186
|
+
}
|
|
187
|
+
function providerEnvironment(provider, model, options) {
|
|
188
|
+
const env = { GOAH_PI_PROVIDER: provider, GOAH_PI_MODEL: model };
|
|
189
|
+
if (provider === "faux") {
|
|
190
|
+
env.GOAH_PI_FAUX_HANDOFF = JSON.stringify({ observations: ["faux runner completed"], results: [], nextSteps: [] });
|
|
191
|
+
return env;
|
|
192
|
+
}
|
|
193
|
+
const destination = provider === "anthropic" ? "ANTHROPIC_API_KEY" : provider === "openai" ? "OPENAI_API_KEY" : "ARK_API_KEY";
|
|
194
|
+
env[destination] = `env:${options.apiKeyEnv ?? destination}`;
|
|
195
|
+
if (options.baseUrl)
|
|
196
|
+
env.GOAH_PI_BASE_URL = options.baseUrl;
|
|
197
|
+
if (provider === "ark-coding") {
|
|
198
|
+
if (!Number.isInteger(options.contextWindowTokens) || !Number.isInteger(options.maxOutputTokensPerTurn))
|
|
199
|
+
throw new Error("ark-coding requires --context-window-tokens and --max-output-tokens");
|
|
200
|
+
env.GOAH_PI_MODEL_CAPABILITIES = JSON.stringify({ contextWindowTokens: options.contextWindowTokens, maxOutputTokensPerTurn: options.maxOutputTokensPerTurn });
|
|
201
|
+
}
|
|
202
|
+
return env;
|
|
203
|
+
}
|
|
204
|
+
function requiredEnv(env, name) { const value = env[name]; if (!value)
|
|
205
|
+
throw new Error(`${name} is missing`); return value; }
|
|
206
|
+
function nearestExisting(path) { let current = resolve(path); while (!existsSync(current)) {
|
|
207
|
+
const parent = dirname(current);
|
|
208
|
+
if (parent === current)
|
|
209
|
+
break;
|
|
210
|
+
current = parent;
|
|
211
|
+
} return current; }
|
|
212
|
+
function field(value, key) { return typeof value === "object" && value !== null && !Array.isArray(value) ? value[key] : undefined; }
|
|
213
|
+
function assistantTokens(value) {
|
|
214
|
+
const message = field(value, "message");
|
|
215
|
+
if (field(message, "role") !== "assistant")
|
|
216
|
+
return 0;
|
|
217
|
+
const usage = field(message, "usage");
|
|
218
|
+
const total = field(usage, "totalTokens");
|
|
219
|
+
return typeof total === "number" ? total : 0;
|
|
220
|
+
}
|
|
221
|
+
function resolveCommand(command) { return command === "$NODE" ? process.execPath : command; }
|
|
222
|
+
function absolutePath(base, value) { return isAbsolute(value) ? value : resolve(base, value); }
|
|
223
|
+
function alive(pid) { try {
|
|
224
|
+
process.kill(pid, 0);
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return false;
|
|
229
|
+
} }
|
|
230
|
+
export { CONTRACT_VERSION };
|
|
231
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@goah/cli",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/billc8128/goah.git",
|
|
8
|
+
"directory": "packages/cli"
|
|
9
|
+
},
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=24.0.0"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"!dist/**/*.test.*",
|
|
16
|
+
"!dist/.tsbuildinfo"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"bin": {
|
|
28
|
+
"goah": "dist/cli.js"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"prepack": "node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\""
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"goah-ledger-contract": "0.1.1",
|
|
35
|
+
"goah-ledger-sqlite": "0.1.1",
|
|
36
|
+
"goah-runner-pi": "0.1.1",
|
|
37
|
+
"goah-supervisor": "0.1.1"
|
|
38
|
+
}
|
|
39
|
+
}
|