agentic-engineering-harness 0.5.1 → 0.6.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/README.md +161 -215
- package/dist/agents/config.js +2 -0
- package/dist/agents/config.js.map +1 -1
- package/dist/audit/intent.d.ts +20 -0
- package/dist/audit/intent.js +42 -0
- package/dist/audit/intent.js.map +1 -0
- package/dist/audit/run.d.ts +46 -0
- package/dist/audit/run.js +147 -0
- package/dist/audit/run.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/assets.d.ts +13 -0
- package/dist/core/assets.js +115 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/config.js +6 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/controlPlane.js +1 -1
- package/dist/core/controlPlane.js.map +1 -1
- package/dist/core/init.js +7 -13
- package/dist/core/init.js.map +1 -1
- package/dist/core/types.d.ts +20 -0
- package/dist/entry.js +144 -3
- package/dist/entry.js.map +1 -1
- package/dist/issues/intake.d.ts +1 -1
- package/dist/paseo/capabilities.d.ts +24 -0
- package/dist/paseo/capabilities.js +104 -0
- package/dist/paseo/capabilities.js.map +1 -0
- package/dist/paseo/context.d.ts +45 -0
- package/dist/paseo/context.js +153 -0
- package/dist/paseo/context.js.map +1 -0
- package/dist/paseo/runtime.d.ts +31 -0
- package/dist/paseo/runtime.js +158 -0
- package/dist/paseo/runtime.js.map +1 -0
- package/dist/paseo/sdk.d.ts +79 -0
- package/dist/paseo/sdk.js +165 -0
- package/dist/paseo/sdk.js.map +1 -0
- package/dist/paseo/start.d.ts +16 -2
- package/dist/paseo/start.js +58 -77
- package/dist/paseo/start.js.map +1 -1
- package/dist/spec/openspec.d.ts +28 -0
- package/dist/spec/openspec.js +179 -0
- package/dist/spec/openspec.js.map +1 -0
- package/dist/toolchain/resolve.js +3 -0
- package/dist/toolchain/resolve.js.map +1 -1
- package/dist/toolchain/setup.js +2 -0
- package/dist/toolchain/setup.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/dist/workers/agentPrompt.js +24 -29
- package/dist/workers/agentPrompt.js.map +1 -1
- package/dist/workers/paseo.d.ts +0 -1
- package/dist/workers/paseo.js +67 -21
- package/dist/workers/paseo.js.map +1 -1
- package/docs/PASEO.md +87 -4
- package/docs/PUBLISHING.md +53 -44
- package/docs/V0.5.2.md +180 -0
- package/docs/V0.6.md +148 -0
- package/package.json +87 -12
- package/presets/agents/orchestration.jsonc +37 -0
- package/schemas/project.schema.json +13 -2
- package/skills/engineering-workflow/SKILL.md +110 -86
- package/skills/openspec-authoring/SKILL.md +26 -0
- package/skills/paseo-orchestration/SKILL.md +38 -0
- package/templates/AGENTS.md +36 -17
- package/templates/agents.source.jsonc +1 -1
- package/templates/openspec-config.yaml +24 -0
- package/templates/project.yaml +11 -2
- package/templates/toolchain.yaml +11 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
import { runProcess } from "../utils/process.js";
|
|
7
|
+
export class PaseoSdkUnavailableError extends Error {
|
|
8
|
+
constructor(message, options) {
|
|
9
|
+
super(message, options);
|
|
10
|
+
this.name = "PaseoSdkUnavailableError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function createPaseoSdkAgent(root, options) {
|
|
14
|
+
return withPaseoClient(root, async (client) => createPaseoSdkAgentWithClient(client, options));
|
|
15
|
+
}
|
|
16
|
+
export async function createPaseoSdkAgentWithClient(client, options) {
|
|
17
|
+
const config = { provider: providerModel(options.provider, options.model) };
|
|
18
|
+
if (options.systemPrompt)
|
|
19
|
+
config.systemPrompt = options.systemPrompt;
|
|
20
|
+
const createOptions = { config, title: options.title };
|
|
21
|
+
if (options.prompt !== undefined)
|
|
22
|
+
createOptions.prompt = options.prompt;
|
|
23
|
+
if (options.outputSchema)
|
|
24
|
+
createOptions.outputSchema = options.outputSchema;
|
|
25
|
+
if (options.labels && Object.keys(options.labels).length)
|
|
26
|
+
createOptions.labels = options.labels;
|
|
27
|
+
// Intentionally omit `parent`: AEH run/task labels own lifecycle relationships.
|
|
28
|
+
// Workspace placement does not imply parentage in the Paseo SDK.
|
|
29
|
+
const handle = options.workspaceId
|
|
30
|
+
? await client.workspaces.ref(options.workspaceId).agents.create(createOptions)
|
|
31
|
+
: await client.agents.create({ ...createOptions, cwd: options.cwd });
|
|
32
|
+
if (options.prompt !== undefined && options.waitForFinish !== false) {
|
|
33
|
+
const turn = await handle.waitForFinish(options.timeoutMs);
|
|
34
|
+
return {
|
|
35
|
+
id: handle.id,
|
|
36
|
+
workspaceId: handle.workspaceId ?? undefined,
|
|
37
|
+
status: turn.status,
|
|
38
|
+
lastMessage: turn.lastMessage,
|
|
39
|
+
error: turn.error
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
id: handle.id,
|
|
44
|
+
workspaceId: handle.workspaceId ?? undefined,
|
|
45
|
+
status: statusText(handle.status)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export async function runPaseoSdkAgent(root, agentId, prompt, timeoutMs) {
|
|
49
|
+
return withPaseoClient(root, async (client) => {
|
|
50
|
+
const handle = client.agents.ref(agentId);
|
|
51
|
+
const turn = await handle.run(prompt, { timeoutMs });
|
|
52
|
+
return { id: agentId, workspaceId: handle.workspaceId ?? undefined, status: turn.status, lastMessage: turn.lastMessage, error: turn.error };
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export async function inspectPaseoSdkAgent(root, agentId) {
|
|
56
|
+
return withPaseoClient(root, async (client) => {
|
|
57
|
+
const refreshed = await client.agents.ref(agentId).refresh();
|
|
58
|
+
return refreshed ? normalizeRecord(refreshed.agent) : undefined;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function probePaseoSdkAgent(root, agentId) {
|
|
62
|
+
return Boolean(await inspectPaseoSdkAgent(root, agentId));
|
|
63
|
+
}
|
|
64
|
+
export async function listPaseoSdkAgents(root, labels = {}) {
|
|
65
|
+
return withPaseoClient(root, async (client) => {
|
|
66
|
+
const filter = { includeArchived: false };
|
|
67
|
+
if (Object.keys(labels).length)
|
|
68
|
+
filter.labels = labels;
|
|
69
|
+
const page = await client.agents.list({ filter });
|
|
70
|
+
return page.entries.map((entry) => normalizeRecord(entry.agent)).filter((agent) => labelsMatch(agent.labels, labels));
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async function withPaseoClient(root, action) {
|
|
74
|
+
const sdk = await loadPaseoSdk(root);
|
|
75
|
+
const client = sdk.createPaseoClient({
|
|
76
|
+
url: process.env.PASEO_DAEMON_URL?.trim() || "ws://127.0.0.1:6767/ws",
|
|
77
|
+
clientId: `aeh-${process.pid}`,
|
|
78
|
+
password: process.env.PASEO_DAEMON_PASSWORD?.trim() || undefined
|
|
79
|
+
});
|
|
80
|
+
try {
|
|
81
|
+
try {
|
|
82
|
+
await client.connect();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new PaseoSdkUnavailableError(`Unable to connect to the Paseo daemon through @getpaseo/client: ${String(error)}`, { cause: error });
|
|
86
|
+
}
|
|
87
|
+
return await action(client);
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await client.close().catch(() => undefined);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function loadPaseoSdk(root) {
|
|
94
|
+
const packageName = "@getpaseo/client";
|
|
95
|
+
let directError;
|
|
96
|
+
try {
|
|
97
|
+
const direct = await import(packageName);
|
|
98
|
+
if (typeof direct.createPaseoClient === "function")
|
|
99
|
+
return direct;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
directError = error;
|
|
103
|
+
}
|
|
104
|
+
const located = await runProcess("command -v paseo", { cwd: root, timeoutMs: 15_000 });
|
|
105
|
+
const executable = located.exitCode === 0 ? located.stdout.trim().split(/\r?\n/).filter(Boolean).at(-1) : undefined;
|
|
106
|
+
if (executable) {
|
|
107
|
+
const real = await fs.realpath(executable).catch(() => executable);
|
|
108
|
+
for (const start of [...new Set([path.dirname(real), path.dirname(executable)])]) {
|
|
109
|
+
let current = start;
|
|
110
|
+
for (let depth = 0; depth < 10; depth += 1) {
|
|
111
|
+
try {
|
|
112
|
+
const resolver = createRequire(path.join(current, "__aeh_paseo_sdk_loader__.cjs"));
|
|
113
|
+
const resolved = resolver.resolve(packageName);
|
|
114
|
+
const bundled = await import(pathToFileURL(resolved).href);
|
|
115
|
+
if (typeof bundled.createPaseoClient === "function")
|
|
116
|
+
return bundled;
|
|
117
|
+
}
|
|
118
|
+
catch { /* walk toward the managed npm installation root */ }
|
|
119
|
+
const parent = path.dirname(current);
|
|
120
|
+
if (parent === current)
|
|
121
|
+
break;
|
|
122
|
+
current = parent;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
throw new PaseoSdkUnavailableError(`@getpaseo/client could not be resolved directly or from the managed Paseo CLI installation.${directError ? ` Direct import: ${String(directError)}` : ""}`, { cause: directError });
|
|
127
|
+
}
|
|
128
|
+
function providerModel(provider, model) {
|
|
129
|
+
if (provider.includes("/"))
|
|
130
|
+
return provider;
|
|
131
|
+
if (!model)
|
|
132
|
+
throw new Error(`Paseo SDK requires an explicit model for provider '${provider}'.`);
|
|
133
|
+
return `${provider}/${model}`;
|
|
134
|
+
}
|
|
135
|
+
function normalizeRecord(raw) {
|
|
136
|
+
const id = stringField(raw, ["id", "agentId", "agent_id"]);
|
|
137
|
+
if (!id)
|
|
138
|
+
throw new Error("Paseo SDK returned an agent without an id.");
|
|
139
|
+
const labels = recordOfStrings(raw.labels);
|
|
140
|
+
return {
|
|
141
|
+
id,
|
|
142
|
+
title: stringField(raw, ["title", "name"]),
|
|
143
|
+
status: statusText(raw.status),
|
|
144
|
+
workspaceId: stringField(raw, ["workspaceId", "workspace_id"]),
|
|
145
|
+
labels,
|
|
146
|
+
raw
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function labelsMatch(actual, expected) {
|
|
150
|
+
return Object.entries(expected).every(([key, value]) => actual?.[key] === value);
|
|
151
|
+
}
|
|
152
|
+
function stringField(record, keys) { for (const key of keys)
|
|
153
|
+
if (typeof record[key] === "string" && record[key])
|
|
154
|
+
return record[key]; return undefined; }
|
|
155
|
+
function recordOfStrings(value) { if (!value || typeof value !== "object" || Array.isArray(value))
|
|
156
|
+
return undefined; const result = {}; for (const [key, item] of Object.entries(value))
|
|
157
|
+
if (typeof item === "string")
|
|
158
|
+
result[key] = item; return Object.keys(result).length ? result : undefined; }
|
|
159
|
+
function statusText(value) { if (typeof value === "string")
|
|
160
|
+
return value; if (value && typeof value === "object") {
|
|
161
|
+
const nested = value.status;
|
|
162
|
+
if (typeof nested === "string")
|
|
163
|
+
return nested;
|
|
164
|
+
} return undefined; }
|
|
165
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/paseo/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/paseo/start.d.ts
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import type { ResolvedAgentTopology } from "../agents/types.js";
|
|
2
2
|
import { loadResolvedAgentTopology } from "../agents/config.js";
|
|
3
|
+
import { reconcileHarnessAssets } from "../core/assets.js";
|
|
3
4
|
import type { HarnessProjectConfig } from "../core/types.js";
|
|
4
5
|
import { setupToolchain } from "../toolchain/setup.js";
|
|
5
6
|
import { commandExists, runProcess } from "../utils/process.js";
|
|
6
|
-
|
|
7
|
+
import { detectPaseoCapabilities } from "./capabilities.js";
|
|
8
|
+
import { launchManagedPaseoAgent, probeManagedPaseoAgent } from "./runtime.js";
|
|
9
|
+
export declare const PASEO_BOOTSTRAP_VERSION = 4;
|
|
10
|
+
export type PaseoSessionPolicy = "fresh-on-start" | "reuse-compatible" | "resume-explicit";
|
|
7
11
|
export interface PaseoStartOptions {
|
|
8
12
|
autoSetup?: boolean;
|
|
9
13
|
webUi?: boolean;
|
|
10
14
|
forceNew?: boolean;
|
|
15
|
+
resume?: boolean;
|
|
11
16
|
leadAgent?: string;
|
|
12
17
|
title?: string;
|
|
13
18
|
aehCommand?: string;
|
|
19
|
+
handoffPath?: string;
|
|
14
20
|
}
|
|
15
21
|
export interface PaseoLeadState {
|
|
16
22
|
version: 1;
|
|
@@ -23,6 +29,8 @@ export interface PaseoLeadState {
|
|
|
23
29
|
provider: string;
|
|
24
30
|
model: string;
|
|
25
31
|
createdAt: string;
|
|
32
|
+
generation?: number;
|
|
33
|
+
handoffPath?: string;
|
|
26
34
|
}
|
|
27
35
|
export interface PaseoStartResult {
|
|
28
36
|
daemonStarted: boolean;
|
|
@@ -34,14 +42,20 @@ export interface PaseoStartResult {
|
|
|
34
42
|
model: string;
|
|
35
43
|
stateFile: string;
|
|
36
44
|
bootstrapFile: string;
|
|
45
|
+
paseoVersion?: string;
|
|
46
|
+
transport?: "sdk" | "cli";
|
|
37
47
|
}
|
|
38
48
|
interface PaseoStartDeps {
|
|
39
49
|
run: typeof runProcess;
|
|
40
50
|
commandExists: typeof commandExists;
|
|
41
51
|
setupToolchain: typeof setupToolchain;
|
|
42
52
|
loadTopology: typeof loadResolvedAgentTopology;
|
|
53
|
+
detectCapabilities: typeof detectPaseoCapabilities;
|
|
54
|
+
launchAgent: typeof launchManagedPaseoAgent;
|
|
55
|
+
probeAgent: typeof probeManagedPaseoAgent;
|
|
56
|
+
reconcileAssets?: typeof reconcileHarnessAssets;
|
|
43
57
|
}
|
|
44
58
|
export declare function startPaseoHarness(root: string, config: HarnessProjectConfig, options?: PaseoStartOptions, deps?: PaseoStartDeps): Promise<PaseoStartResult>;
|
|
45
|
-
export declare function buildPaseoLeadBootstrap(projectName: string, projectRoot: string, aehCommand: string): string;
|
|
59
|
+
export declare function buildPaseoLeadBootstrap(projectName: string, projectRoot: string, aehCommand: string, preferPaseoTools?: boolean, handoffPath?: string): string;
|
|
46
60
|
export declare function resolveLeadAgent(topology: ResolvedAgentTopology, configured?: string): string;
|
|
47
61
|
export {};
|
package/dist/paseo/start.js
CHANGED
|
@@ -2,28 +2,26 @@ import fs from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { loadResolvedAgentTopology } from "../agents/config.js";
|
|
4
4
|
import { executionSelectionForAgent } from "../agents/routing.js";
|
|
5
|
+
import { reconcileHarnessAssets } from "../core/assets.js";
|
|
5
6
|
import { setupToolchain } from "../toolchain/setup.js";
|
|
6
7
|
import { clearToolchainEnvCache, commandExists, runProcess } from "../utils/process.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
setupToolchain,
|
|
12
|
-
loadTopology: loadResolvedAgentTopology
|
|
13
|
-
};
|
|
8
|
+
import { detectPaseoCapabilities, isRecoverableDaemonStatus } from "./capabilities.js";
|
|
9
|
+
import { launchManagedPaseoAgent, probeManagedPaseoAgent } from "./runtime.js";
|
|
10
|
+
export const PASEO_BOOTSTRAP_VERSION = 4;
|
|
11
|
+
const DEFAULT_DEPS = { run: runProcess, commandExists, setupToolchain, loadTopology: loadResolvedAgentTopology, detectCapabilities: detectPaseoCapabilities, launchAgent: launchManagedPaseoAgent, probeAgent: probeManagedPaseoAgent, reconcileAssets: reconcileHarnessAssets };
|
|
14
12
|
export async function startPaseoHarness(root, config, options = {}, deps = DEFAULT_DEPS) {
|
|
15
13
|
const projectRoot = path.resolve(root);
|
|
14
|
+
await (deps.reconcileAssets ?? reconcileHarnessAssets)(projectRoot);
|
|
16
15
|
const settings = config.orchestration?.interactive;
|
|
17
16
|
const autoSetup = options.autoSetup ?? settings?.autoSetup ?? true;
|
|
18
17
|
const webUi = options.webUi ?? settings?.webUi ?? true;
|
|
19
|
-
const forceNew = options.forceNew ?? false;
|
|
20
|
-
const reuseSession = settings?.reuseSession ?? true;
|
|
21
18
|
const stateDir = path.resolve(projectRoot, settings?.stateDir ?? ".harness/paseo");
|
|
22
19
|
const stateFile = path.join(stateDir, "lead-session.json");
|
|
23
20
|
const bootstrapFile = path.join(stateDir, "lead-bootstrap.md");
|
|
21
|
+
const sessionPolicy = settings?.sessionPolicy ?? "fresh-on-start";
|
|
22
|
+
const reuseRequested = options.resume === true || (sessionPolicy === "reuse-compatible" && options.forceNew !== true);
|
|
24
23
|
const topology = await deps.loadTopology(projectRoot, config, config.agents?.activeProfile);
|
|
25
24
|
const leadName = resolveLeadAgent(topology, options.leadAgent ?? settings?.leadAgent);
|
|
26
|
-
const lead = topology.agents[leadName];
|
|
27
25
|
const selection = executionSelectionForAgent(topology, leadName);
|
|
28
26
|
const runtimeCommand = runtimeExecutable(topology, leadName);
|
|
29
27
|
const missingBefore = await missingCommands(projectRoot, ["paseo", runtimeCommand], deps);
|
|
@@ -34,87 +32,79 @@ export async function startPaseoHarness(root, config, options = {}, deps = DEFAU
|
|
|
34
32
|
const missingAfter = await missingCommands(projectRoot, ["paseo", runtimeCommand], deps);
|
|
35
33
|
if (missingAfter.length)
|
|
36
34
|
throw new Error(`aeh start cannot launch Paseo because these managed commands are unavailable: ${missingAfter.join(", ")}. Run aeh setup or provide the required host prerequisite/credential.`);
|
|
35
|
+
const capabilities = await deps.detectCapabilities(projectRoot, deps.run);
|
|
37
36
|
let daemonStarted = false;
|
|
38
|
-
const
|
|
37
|
+
const daemonStatusCommand = capabilities.daemonJson ? "paseo daemon status --json" : "paseo daemon status";
|
|
38
|
+
let daemonStatus = await deps.run(daemonStatusCommand, { cwd: projectRoot, timeoutMs: 30_000 });
|
|
39
39
|
if (daemonStatus.exitCode !== 0) {
|
|
40
|
+
if (isRecoverableDaemonStatus(daemonStatus))
|
|
41
|
+
await deps.run("paseo daemon stop", { cwd: projectRoot, timeoutMs: 30_000 }).catch(() => undefined);
|
|
40
42
|
const startCommand = webUi ? "paseo daemon start --web-ui" : "paseo daemon start";
|
|
41
43
|
const daemonStart = await deps.run(startCommand, { cwd: projectRoot, timeoutMs: 60_000 });
|
|
42
44
|
if (daemonStart.exitCode !== 0)
|
|
43
45
|
throw new Error(`Failed to start Paseo daemon: ${diagnostic(daemonStart)}`);
|
|
44
46
|
daemonStarted = true;
|
|
45
|
-
|
|
46
|
-
if (
|
|
47
|
-
throw new Error(`Paseo daemon did not become ready after startup: ${diagnostic(
|
|
47
|
+
daemonStatus = await deps.run(daemonStatusCommand, { cwd: projectRoot, timeoutMs: 30_000 });
|
|
48
|
+
if (daemonStatus.exitCode !== 0)
|
|
49
|
+
throw new Error(`Paseo daemon did not become ready after startup: ${diagnostic(daemonStatus)}`);
|
|
48
50
|
}
|
|
49
51
|
const provider = selection.paseoProvider;
|
|
50
52
|
const model = paseoModel(selection);
|
|
51
53
|
const title = options.title ?? settings?.title ?? `AEH Lead · ${config.project.name}`;
|
|
52
54
|
const aehCommand = options.aehCommand ?? "aeh";
|
|
53
|
-
const bootstrap = buildPaseoLeadBootstrap(config.project.name, projectRoot, aehCommand);
|
|
55
|
+
const bootstrap = buildPaseoLeadBootstrap(config.project.name, projectRoot, aehCommand, settings?.usePaseoTools !== false, options.handoffPath);
|
|
54
56
|
await fs.mkdir(stateDir, { recursive: true });
|
|
55
57
|
await fs.writeFile(bootstrapFile, `${bootstrap}\n`);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
if (probe.exitCode === 0)
|
|
61
|
-
return { daemonStarted, session: "reused", agentId: existing.agentId, title: existing.title, leadAgent: existing.leadAgent, provider: existing.provider, model: existing.model, stateFile, bootstrapFile };
|
|
62
|
-
}
|
|
58
|
+
const previous = await loadState(stateFile);
|
|
59
|
+
if (!options.forceNew && reuseRequested && !options.handoffPath && previous && compatibleState(previous, { projectRoot, leadName, provider, model, title })) {
|
|
60
|
+
if (await deps.probeAgent(projectRoot, previous.agentId))
|
|
61
|
+
return { daemonStarted, session: "reused", agentId: previous.agentId, title: previous.title, leadAgent: previous.leadAgent, provider: previous.provider, model: previous.model, stateFile, bootstrapFile, paseoVersion: capabilities.version };
|
|
63
62
|
}
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
throw new Error(`Paseo created no parseable agent id. Output: ${launch.stdout.trim() || "<empty>"}`);
|
|
76
|
-
const wait = await deps.run(`paseo wait ${quote(agentId)} --timeout 300`, { cwd: projectRoot, timeoutMs: 330_000 });
|
|
77
|
-
if (wait.exitCode !== 0)
|
|
78
|
-
throw new Error(`AEH lead bootstrap did not complete successfully: ${diagnostic(wait)}`);
|
|
79
|
-
const state = {
|
|
80
|
-
version: 1,
|
|
81
|
-
bootstrapVersion: PASEO_BOOTSTRAP_VERSION,
|
|
82
|
-
projectRoot,
|
|
83
|
-
projectName: config.project.name,
|
|
84
|
-
agentId,
|
|
63
|
+
const generation = (previous?.generation ?? 0) + 1;
|
|
64
|
+
const labels = {
|
|
65
|
+
"aeh.project": config.project.name,
|
|
66
|
+
"aeh.kind": "lead",
|
|
67
|
+
"aeh.role": leadName,
|
|
68
|
+
"aeh.generation": String(generation)
|
|
69
|
+
};
|
|
70
|
+
if (options.handoffPath)
|
|
71
|
+
labels["aeh.handoff"] = options.handoffPath;
|
|
72
|
+
const launch = await deps.launchAgent(projectRoot, {
|
|
73
|
+
cwd: projectRoot,
|
|
85
74
|
title,
|
|
86
|
-
leadAgent: leadName,
|
|
87
75
|
provider,
|
|
88
76
|
model,
|
|
89
|
-
|
|
90
|
-
|
|
77
|
+
systemPrompt: bootstrap,
|
|
78
|
+
labels,
|
|
79
|
+
waitForFinish: false,
|
|
80
|
+
timeoutSeconds: 300
|
|
81
|
+
});
|
|
82
|
+
if (launch.exitCode !== 0 || !launch.id)
|
|
83
|
+
throw new Error(`Failed to create AEH lead in Paseo${capabilities.version ? ` ${capabilities.version}` : ""}: ${launch.stderr || launch.stdout || `exit code ${launch.exitCode}`}`);
|
|
84
|
+
const agentId = launch.id;
|
|
85
|
+
const state = { version: 1, bootstrapVersion: PASEO_BOOTSTRAP_VERSION, projectRoot, projectName: config.project.name, agentId, title, leadAgent: leadName, provider, model, createdAt: new Date().toISOString(), generation, handoffPath: options.handoffPath };
|
|
91
86
|
await fs.writeFile(stateFile, `${JSON.stringify(state, null, 2)}\n`);
|
|
92
|
-
return { daemonStarted, session: "created", agentId, title, leadAgent: leadName, provider, model, stateFile, bootstrapFile };
|
|
87
|
+
return { daemonStarted, session: "created", agentId, title, leadAgent: leadName, provider, model, stateFile, bootstrapFile, paseoVersion: capabilities.version, transport: launch.transport };
|
|
93
88
|
}
|
|
94
|
-
export function buildPaseoLeadBootstrap(projectName, projectRoot, aehCommand) {
|
|
95
|
-
|
|
89
|
+
export function buildPaseoLeadBootstrap(projectName, projectRoot, aehCommand, preferPaseoTools = true, handoffPath) {
|
|
90
|
+
const handoff = handoffPath ? `\n\nThis lead was created by proactive context rotation. Before the next engineering action, read the deterministic handoff artifact ${JSON.stringify(handoffPath)} and the sealed/run/audit/delivery artifacts it references. Durable artifacts are authoritative; do not ask the previous lead to replay its conversation.` : "";
|
|
91
|
+
return `AEH thin-lead Paseo bootstrap v${PASEO_BOOTSTRAP_VERSION}.
|
|
92
|
+
|
|
93
|
+
You are the top-level engineering lead for project ${JSON.stringify(projectName)} at ${JSON.stringify(projectRoot)}. A normal \`aeh start\` creates a fresh lead; explicit resume is opt-in.${handoff}
|
|
96
94
|
|
|
97
|
-
|
|
95
|
+
Before engineering work, read AGENTS.md and .harness/skills/engineering-workflow/SKILL.md when present. Those instructions plus the resolved AEH agent topology are authoritative for available roles, charters, permissions, routing and delegation. Do not maintain or invent a separate role map in conversational context.
|
|
98
96
|
|
|
99
|
-
|
|
97
|
+
Every engineering operation must enter through AEH, including read-only audits. Only purely informational questions may bypass. Whenever the workflow says \`aeh\`, invoke exactly: \`${aehCommand}\`.
|
|
100
98
|
|
|
101
|
-
|
|
99
|
+
Remain a thin ORCHESTRATOR: preserve user intent, make semantic/risk decisions, delegate bounded operations through the authoritative topology, monitor deterministic state and perform final semantic acceptance. Follow engineering-workflow end-to-end for intent classification, AUDIT, QUICK/SPEC triage, OpenSpec authoring, sealed execution, recovery, validation and delivery rather than reproducing those procedures here.
|
|
102
100
|
|
|
103
|
-
|
|
104
|
-
1. inspect repository context and automatically build triage evidence;
|
|
105
|
-
2. run deterministic QUICK/SPEC triage and obey the result without manual downgrade;
|
|
106
|
-
3. create/validate the QuickContract or complete SDD/TaskContract as required;
|
|
107
|
-
4. seal normative inputs before implementation;
|
|
108
|
-
5. invoke the Harness run so routed workers, planner waves, deterministic validators, evidence graph, review convergence, remediation/escalation and lead acceptance execute under the frozen control plane;
|
|
109
|
-
6. never implement directly as a shortcut around Harness execution;
|
|
110
|
-
7. keep implementation/tool/review failures autonomous unless the Harness reaches a true human-on-exception state;
|
|
111
|
-
8. surface concise progress and final acceptance/delivery state to the user.
|
|
101
|
+
${preferPaseoTools ? `When running inside Paseo, use the paseo-orchestration skill and injected native/MCP tools for conversational delegation and /paseo-handoff for responsibility transfer. AEH's external controller may create independent top-level Paseo agents for Harness-owned work; AEH run/task labels, not Paseo parentage, define their workflow ownership.` : `Use AEH's configured Paseo adapter for delegation and lifecycle control.`}
|
|
112
102
|
|
|
113
|
-
|
|
103
|
+
Before non-trivial work, inspect context pressure through Paseo status when exposed or run \`${aehCommand} context guard --agent "$PASEO_AGENT_ID"\`. Honor HANDOFF_REQUIRED/HARD_HANDOFF and stop the old lead when a replacement is created.
|
|
114
104
|
|
|
115
|
-
|
|
105
|
+
The compiled AEH TaskContract/SDD plus seal are normative during implementation. OpenSpec is authoring provenance before freeze, not a competing runtime authority. Do not perform broad repository operations directly when a bounded Harness operation or configured agent owns them.
|
|
116
106
|
|
|
117
|
-
|
|
107
|
+
This bootstrap is session configuration, not a user task. Do not emit an initialization handshake or synthetic readiness message; remain idle until the user's first real request.`;
|
|
118
108
|
}
|
|
119
109
|
export function resolveLeadAgent(topology, configured) {
|
|
120
110
|
if (configured) {
|
|
@@ -130,19 +120,11 @@ export function resolveLeadAgent(topology, configured) {
|
|
|
130
120
|
throw new Error("aeh start requires an enabled orchestrator/lead agent in the resolved topology.");
|
|
131
121
|
return orchestrator.name;
|
|
132
122
|
}
|
|
133
|
-
function runtimeExecutable(topology, leadName) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
async function missingCommands(root, commands, deps) {
|
|
138
|
-
const result = [];
|
|
139
|
-
for (const command of [...new Set(commands.filter(Boolean))])
|
|
140
|
-
if (!(await deps.commandExists(command, root)))
|
|
141
|
-
result.push(command);
|
|
142
|
-
return result;
|
|
143
|
-
}
|
|
123
|
+
function runtimeExecutable(topology, leadName) { const runtime = topology.agents[leadName].runtime; return runtime.command?.trim().split(/\s+/, 1)[0] || runtime.adapter; }
|
|
124
|
+
async function missingCommands(root, commands, deps) { const result = []; for (const command of [...new Set(commands.filter(Boolean))])
|
|
125
|
+
if (!(await deps.commandExists(command, root)))
|
|
126
|
+
result.push(command); return result; }
|
|
144
127
|
function paseoModel(selection) { return selection.runtimeAdapter === "codex" ? selection.modelName : selection.modelId; }
|
|
145
|
-
function extractAgentId(stdout) { return stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).at(-1); }
|
|
146
128
|
async function loadState(file) { try {
|
|
147
129
|
return JSON.parse(await fs.readFile(file, "utf8"));
|
|
148
130
|
}
|
|
@@ -151,5 +133,4 @@ catch {
|
|
|
151
133
|
} }
|
|
152
134
|
function compatibleState(state, expected) { return state.version === 1 && state.bootstrapVersion === PASEO_BOOTSTRAP_VERSION && state.projectRoot === expected.projectRoot && state.leadAgent === expected.leadName && state.provider === expected.provider && state.model === expected.model && state.title === expected.title; }
|
|
153
135
|
function diagnostic(result) { return [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join("\n") || `exit code ${result.exitCode}`; }
|
|
154
|
-
function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
|
|
155
136
|
//# sourceMappingURL=start.js.map
|
package/dist/paseo/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/paseo/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/paseo/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { HarnessProjectConfig } from "../core/types.js";
|
|
2
|
+
import { runProcess } from "../utils/process.js";
|
|
3
|
+
export interface OpenSpecAuthoringConfig {
|
|
4
|
+
provider?: "openspec" | "native" | string;
|
|
5
|
+
schema?: string;
|
|
6
|
+
managerAgent?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface OpenSpecPreparedChange {
|
|
9
|
+
taskId: string;
|
|
10
|
+
changeName: string;
|
|
11
|
+
directory: string;
|
|
12
|
+
created: boolean;
|
|
13
|
+
schema: string;
|
|
14
|
+
managerAgent: string;
|
|
15
|
+
}
|
|
16
|
+
export interface OpenSpecCompileResult {
|
|
17
|
+
taskId: string;
|
|
18
|
+
changeName: string;
|
|
19
|
+
sddDirectory: string;
|
|
20
|
+
contractPath: string;
|
|
21
|
+
requirements: string[];
|
|
22
|
+
sourceSha256: string;
|
|
23
|
+
validatorId: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function openSpecAuthoringConfig(config: HarnessProjectConfig): Required<Pick<OpenSpecAuthoringConfig, "provider" | "schema" | "managerAgent">>;
|
|
26
|
+
export declare function openSpecChangeName(taskId: string): string;
|
|
27
|
+
export declare function prepareOpenSpecChange(root: string, config: HarnessProjectConfig, taskId: string, title: string, run?: typeof runProcess): Promise<OpenSpecPreparedChange>;
|
|
28
|
+
export declare function compileOpenSpecChange(root: string, config: HarnessProjectConfig, taskId: string, title: string, changeName?: string, run?: typeof runProcess): Promise<OpenSpecCompileResult>;
|