@agent-relay/harness-driver 7.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.
Files changed (50) hide show
  1. package/README.md +9 -0
  2. package/dist/actions.d.ts +10 -0
  3. package/dist/actions.d.ts.map +1 -0
  4. package/dist/actions.js +140 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/broker-driver.d.ts +17 -0
  7. package/dist/broker-driver.d.ts.map +1 -0
  8. package/dist/broker-driver.js +56 -0
  9. package/dist/broker-driver.js.map +1 -0
  10. package/dist/broker-path.d.ts +31 -0
  11. package/dist/broker-path.d.ts.map +1 -0
  12. package/dist/broker-path.js +216 -0
  13. package/dist/broker-path.js.map +1 -0
  14. package/dist/client.d.ts +293 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +892 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/driver-types.d.ts +43 -0
  19. package/dist/driver-types.d.ts.map +1 -0
  20. package/dist/driver-types.js +2 -0
  21. package/dist/driver-types.js.map +1 -0
  22. package/dist/event-bus.d.ts +57 -0
  23. package/dist/event-bus.d.ts.map +1 -0
  24. package/dist/event-bus.js +76 -0
  25. package/dist/event-bus.js.map +1 -0
  26. package/dist/harness.d.ts +82 -0
  27. package/dist/harness.d.ts.map +1 -0
  28. package/dist/harness.js +96 -0
  29. package/dist/harness.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +10 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lifecycle-hooks.d.ts +166 -0
  35. package/dist/lifecycle-hooks.d.ts.map +1 -0
  36. package/dist/lifecycle-hooks.js +25 -0
  37. package/dist/lifecycle-hooks.js.map +1 -0
  38. package/dist/protocol.d.ts +527 -0
  39. package/dist/protocol.d.ts.map +1 -0
  40. package/dist/protocol.js +2 -0
  41. package/dist/protocol.js.map +1 -0
  42. package/dist/transport.d.ts +104 -0
  43. package/dist/transport.d.ts.map +1 -0
  44. package/dist/transport.js +520 -0
  45. package/dist/transport.js.map +1 -0
  46. package/dist/types.d.ts +120 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +5 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +71 -0
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # @agent-relay/harness-driver
2
+
3
+ Managed harness runtime for Agent Relay.
4
+
5
+ Use this package when Agent Relay needs to own the harness boundary: attach,
6
+ wrap, spawn, inject messages into a runtime, observe readiness, and collect
7
+ logs. The core `@agent-relay/sdk` package owns messaging, delivery contracts,
8
+ and action protocol; this package provides optional managed runtime
9
+ implementations.
@@ -0,0 +1,10 @@
1
+ import type { AgentRelayActions } from '@agent-relay/sdk/actions';
2
+ import type { AgentDriver } from './driver-types.js';
3
+ export interface RegisterDriverActionsOptions {
4
+ actionPrefix?: string;
5
+ }
6
+ export interface RegisteredDriverActions {
7
+ unregister(): void;
8
+ }
9
+ export declare function registerDriverActions(actions: AgentRelayActions, driver: AgentDriver, options?: RegisterDriverActionsOptions): RegisteredDriverActions;
10
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,IAAI,IAAI,CAAC;CACpB;AAiED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,4BAAiC,GACzC,uBAAuB,CA0GzB"}
@@ -0,0 +1,140 @@
1
+ const createAgentSchema = {
2
+ type: 'object',
3
+ required: ['name', 'cli'],
4
+ additionalProperties: false,
5
+ properties: {
6
+ name: { type: 'string', minLength: 1 },
7
+ cli: { type: 'string', minLength: 1 },
8
+ args: { type: 'array', items: { type: 'string' } },
9
+ channels: { type: 'array', items: { type: 'string' } },
10
+ task: { type: 'string' },
11
+ model: { type: 'string' },
12
+ cwd: { type: 'string' },
13
+ transport: { enum: ['pty', 'headless'] },
14
+ },
15
+ };
16
+ const releaseAgentSchema = {
17
+ type: 'object',
18
+ required: ['name'],
19
+ additionalProperties: false,
20
+ properties: {
21
+ name: { type: 'string', minLength: 1 },
22
+ reason: { type: 'string' },
23
+ },
24
+ };
25
+ const statusAgentSchema = {
26
+ type: 'object',
27
+ required: ['name'],
28
+ additionalProperties: false,
29
+ properties: {
30
+ name: { type: 'string', minLength: 1 },
31
+ },
32
+ };
33
+ function actionName(prefix, name) {
34
+ return prefix ? `${prefix}.${name}` : name;
35
+ }
36
+ export function registerDriverActions(actions, driver, options = {}) {
37
+ const prefix = options.actionPrefix ?? 'agent';
38
+ const runtimes = new Map();
39
+ const handles = [
40
+ actions.register({
41
+ name: actionName(prefix, 'create'),
42
+ description: 'Create a managed agent runtime through the Agent Relay driver.',
43
+ inputSchema: createAgentSchema,
44
+ outputSchema: {
45
+ type: 'object',
46
+ required: ['agent', 'delivery'],
47
+ properties: {
48
+ agent: { type: 'object' },
49
+ delivery: { type: 'object' },
50
+ },
51
+ },
52
+ handler: async (input) => {
53
+ const runtime = await driver.spawn(input);
54
+ runtimes.set(runtime.agent.name, runtime);
55
+ return { agent: runtime.agent, delivery: runtime.delivery };
56
+ },
57
+ }),
58
+ actions.register({
59
+ name: actionName(prefix, 'release'),
60
+ description: 'Release a managed agent runtime through the Agent Relay driver.',
61
+ inputSchema: releaseAgentSchema,
62
+ outputSchema: {
63
+ type: 'object',
64
+ required: ['name', 'released'],
65
+ properties: {
66
+ name: { type: 'string' },
67
+ released: { type: 'boolean' },
68
+ },
69
+ },
70
+ handler: async ({ name, reason }) => {
71
+ const runtime = runtimes.get(name);
72
+ if (runtime) {
73
+ await runtime.release(reason);
74
+ runtimes.delete(name);
75
+ }
76
+ else if (driver.release) {
77
+ await driver.release(name, reason);
78
+ }
79
+ else {
80
+ throw new Error(`Driver cannot release unmanaged runtime: ${name}`);
81
+ }
82
+ return { name, released: true };
83
+ },
84
+ }),
85
+ actions.register({
86
+ name: actionName(prefix, 'status'),
87
+ description: 'Read managed agent runtime status through the Agent Relay driver.',
88
+ inputSchema: statusAgentSchema,
89
+ outputSchema: {
90
+ type: 'object',
91
+ required: ['name', 'status'],
92
+ properties: {
93
+ name: { type: 'string' },
94
+ status: { enum: ['idle', 'busy', 'offline', 'unknown'] },
95
+ },
96
+ },
97
+ handler: async ({ name }) => {
98
+ const runtime = runtimes.get(name);
99
+ const status = driver.status
100
+ ? await driver.status(name)
101
+ : runtime
102
+ ? await runtime.status()
103
+ : 'offline';
104
+ return { name, status };
105
+ },
106
+ }),
107
+ ];
108
+ if (driver.attach) {
109
+ handles.push(actions.register({
110
+ name: actionName(prefix, 'attach'),
111
+ description: 'Attach an externally managed agent runtime through the Agent Relay driver.',
112
+ inputSchema: {
113
+ type: 'object',
114
+ required: ['name', 'kind'],
115
+ additionalProperties: false,
116
+ properties: {
117
+ name: { type: 'string', minLength: 1 },
118
+ kind: { type: 'string', minLength: 1 },
119
+ cwd: { type: 'string' },
120
+ endpoint: { type: 'string' },
121
+ metadata: { type: 'object' },
122
+ },
123
+ },
124
+ handler: async (input) => {
125
+ const runtime = await driver.attach(input);
126
+ runtimes.set(runtime.agent.name, runtime);
127
+ return { agent: runtime.agent, delivery: runtime.delivery };
128
+ },
129
+ }));
130
+ }
131
+ return {
132
+ unregister: () => {
133
+ for (const handle of handles) {
134
+ handle.unregister();
135
+ }
136
+ runtimes.clear();
137
+ },
138
+ };
139
+ }
140
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { HarnessDriverClient, type RuntimeSpawnOptions } from './client.js';
2
+ import type { AgentDriver, DriverRuntimeStatus, SpawnRuntimeInput, SpawnedAgentRuntime } from './driver-types.js';
3
+ export interface BrokerDriverOptions extends RuntimeSpawnOptions {
4
+ client?: HarnessDriverClient;
5
+ }
6
+ export declare class BrokerDriver implements AgentDriver {
7
+ private readonly options;
8
+ readonly kind = "broker";
9
+ private client?;
10
+ constructor(options?: BrokerDriverOptions);
11
+ spawn(input: SpawnRuntimeInput): Promise<SpawnedAgentRuntime>;
12
+ private ensureClient;
13
+ private runtimeHandle;
14
+ release(name: string, reason?: string): Promise<void>;
15
+ status(name: string): Promise<DriverRuntimeStatus>;
16
+ }
17
+ //# sourceMappingURL=broker-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-driver.d.ts","sourceRoot":"","sources":["../src/broker-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,qBAAa,YAAa,YAAW,WAAW;IAKlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAAC,CAAsB;gBAER,OAAO,GAAE,mBAAwB;IAIxD,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAUrD,YAAY;IAO1B,OAAO,CAAC,aAAa;IAWf,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAKzD"}
@@ -0,0 +1,56 @@
1
+ import { HarnessDriverClient } from './client.js';
2
+ function statusFromManagedAgent(agent) {
3
+ if (!agent) {
4
+ return 'offline';
5
+ }
6
+ const currentState = 'current_state' in agent && typeof agent.current_state === 'string' ? agent.current_state : undefined;
7
+ if (currentState === 'working' || currentState === 'blocked_on_send') {
8
+ return 'busy';
9
+ }
10
+ if (currentState === 'idle') {
11
+ return 'idle';
12
+ }
13
+ return 'unknown';
14
+ }
15
+ export class BrokerDriver {
16
+ options;
17
+ kind = 'broker';
18
+ client;
19
+ constructor(options = {}) {
20
+ this.options = options;
21
+ this.client = options.client;
22
+ }
23
+ async spawn(input) {
24
+ const client = await this.ensureClient();
25
+ const transport = input.transport ?? 'pty';
26
+ const { transport: _transport, ...spawnInput } = input;
27
+ const result = transport === 'headless' ? await client.spawnHeadless(spawnInput) : await client.spawnPty(spawnInput);
28
+ return this.runtimeHandle(client, result);
29
+ }
30
+ async ensureClient() {
31
+ if (!this.client) {
32
+ this.client = await HarnessDriverClient.spawn(this.options);
33
+ }
34
+ return this.client;
35
+ }
36
+ runtimeHandle(client, result) {
37
+ return {
38
+ agent: { name: result.name, id: result.sessionId },
39
+ delivery: { mode: 'managed' },
40
+ status: async () => this.status(result.name),
41
+ release: async (reason) => {
42
+ await client.release(result.name, reason);
43
+ },
44
+ };
45
+ }
46
+ async release(name, reason) {
47
+ const client = await this.ensureClient();
48
+ await client.release(name, reason);
49
+ }
50
+ async status(name) {
51
+ const client = await this.ensureClient();
52
+ const agents = await client.listAgents();
53
+ return statusFromManagedAgent(agents.find((agent) => agent.name === name));
54
+ }
55
+ }
56
+ //# sourceMappingURL=broker-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-driver.js","sourceRoot":"","sources":["../src/broker-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA4B,MAAM,aAAa,CAAC;AAS5E,SAAS,sBAAsB,CAAC,KAA+C;IAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAChB,eAAe,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,iBAAiB,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD,MAAM,OAAO,YAAY;IAKM;IAJpB,IAAI,GAAG,QAAQ,CAAC;IAEjB,MAAM,CAAuB;IAErC,YAA6B,UAA+B,EAAE;QAAjC,YAAO,GAAP,OAAO,CAA0B;QAC5D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAwB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;QAC3C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;QACvD,MAAM,MAAM,GACV,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAExG,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,MAA2B,EAAE,MAAwB;QACzE,OAAO;YACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE;YAClD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,EAAE;gBACjC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAAe;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,OAAO,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Resolves the agent-relay-broker binary path at runtime.
3
+ *
4
+ * Usage:
5
+ * import { getBrokerBinaryPath } from '@agent-relay/harness-driver/broker-path';
6
+ * const binPath = getBrokerBinaryPath();
7
+ */
8
+ export declare function getOptionalDepPackageName(platform?: NodeJS.Platform, arch?: string): string;
9
+ /**
10
+ * Resolve the agent-relay-broker binary path.
11
+ *
12
+ * Search order:
13
+ * 1. Explicit env override (BROKER_BINARY_PATH / AGENT_RELAY_BIN)
14
+ * 2. Local Cargo build when the runtime is loaded from an agent-relay source
15
+ * checkout
16
+ * 3. Platform-specific optional-dep package
17
+ * (`@agent-relay/broker-<platform>-<arch>`) — primary production path
18
+ * 4. Cargo development paths (target/release and target/debug)
19
+ * 5. PATH lookup via `which` / `where`
20
+ *
21
+ * @returns Absolute path to the broker binary, or null if not found
22
+ */
23
+ export declare function getBrokerBinaryPath(): string | null;
24
+ /**
25
+ * Human-readable error message explaining that the optional-dep broker
26
+ * package for the current platform/arch isn't installed. Used by the SDK
27
+ * at broker-spawn time so users get a clear message instead of an
28
+ * inscrutable `spawn agent-relay-broker ENOENT`.
29
+ */
30
+ export declare function formatBrokerNotFoundError(): string;
31
+ //# sourceMappingURL=broker-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-path.d.ts","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,wBAAgB,yBAAyB,CACvC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAER;AAyJD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CA8CnD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CASlD"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Resolves the agent-relay-broker binary path at runtime.
3
+ *
4
+ * Usage:
5
+ * import { getBrokerBinaryPath } from '@agent-relay/harness-driver/broker-path';
6
+ * const binPath = getBrokerBinaryPath();
7
+ */
8
+ import { existsSync } from 'node:fs';
9
+ import { join, dirname, resolve } from 'node:path';
10
+ import { execFileSync } from 'node:child_process';
11
+ import { createRequire } from 'node:module';
12
+ import { fileURLToPath } from 'node:url';
13
+ const BROKER_NAME = 'agent-relay-broker';
14
+ export function getOptionalDepPackageName(platform = process.platform, arch = process.arch) {
15
+ return `@agent-relay/broker-${platform}-${arch}`;
16
+ }
17
+ function addUniquePath(paths, candidate) {
18
+ if (!candidate || paths.includes(candidate)) {
19
+ return;
20
+ }
21
+ paths.push(candidate);
22
+ }
23
+ function getImportMetaUrl() {
24
+ try {
25
+ return import.meta.url;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function getCurrentModuleDir() {
32
+ if (typeof __dirname === 'string' && __dirname) {
33
+ return __dirname;
34
+ }
35
+ if (typeof __filename === 'string' && __filename) {
36
+ return dirname(__filename);
37
+ }
38
+ const importMetaUrl = getImportMetaUrl();
39
+ if (!importMetaUrl) {
40
+ return null;
41
+ }
42
+ try {
43
+ return dirname(fileURLToPath(importMetaUrl));
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ function getCurrentModuleReference() {
50
+ if (typeof __filename === 'string' && __filename) {
51
+ return __filename;
52
+ }
53
+ if (typeof __dirname === 'string' && __dirname) {
54
+ return join(__dirname, 'broker-path.js');
55
+ }
56
+ return getImportMetaUrl();
57
+ }
58
+ function getResolutionReferences() {
59
+ const refs = [];
60
+ addUniquePath(refs, getCurrentModuleReference());
61
+ // Also try the entry script so CLI consumers and bundled installs
62
+ // (where the SDK lives under the consuming package's node_modules) can
63
+ // still find the optional-dep package.
64
+ if (process.argv[1]) {
65
+ addUniquePath(refs, process.argv[1]);
66
+ }
67
+ // Fall back to the cwd's package.json as a final resolution anchor.
68
+ // `createRequire` only needs a file path that sits inside a project root
69
+ // — it doesn't have to exist. This catches setups where the SDK's module
70
+ // path and the entry script both sit outside the consumer's node_modules
71
+ // tree (e.g. a globally-installed SDK importing per-project optional deps,
72
+ // some vite/webpack bundling configurations, repl experimentation), but
73
+ // the consumer's cwd is inside their own project. We only use this
74
+ // reference to run require.resolve; no file I/O is triggered on misses.
75
+ addUniquePath(refs, join(process.cwd(), 'package.json'));
76
+ return refs;
77
+ }
78
+ /**
79
+ * Resolve the broker binary via the platform-specific optional-dependency
80
+ * package (`@agent-relay/broker-<platform>-<arch>`). Returns null when the
81
+ * optional dep is not installed (expected when users install with
82
+ * --no-optional / --omit=optional / --include= omits optional, or when the
83
+ * broker hasn't been published for their platform yet).
84
+ */
85
+ function getOptionalDepBinaryPath(ext) {
86
+ const pkgName = getOptionalDepPackageName();
87
+ const binaryFile = `${BROKER_NAME}${ext}`;
88
+ for (const ref of getResolutionReferences()) {
89
+ try {
90
+ const pkgJsonPath = createRequire(ref).resolve(`${pkgName}/package.json`);
91
+ const binPath = join(dirname(pkgJsonPath), 'bin', binaryFile);
92
+ if (existsSync(binPath))
93
+ return binPath;
94
+ }
95
+ catch {
96
+ // Try the next reference.
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+ function findAncestorSourceCheckoutRoot(start) {
102
+ let current = resolve(start);
103
+ for (let i = 0; i < 8; i++) {
104
+ if (isSourceCheckoutRoot(current)) {
105
+ return current;
106
+ }
107
+ const parent = resolve(current, '..');
108
+ if (parent === current)
109
+ break;
110
+ current = parent;
111
+ }
112
+ return null;
113
+ }
114
+ function getDevelopmentBinaryPaths(ext) {
115
+ const binaryPaths = [];
116
+ const repoRoots = new Set();
117
+ const addRepoRoot = (candidate) => {
118
+ if (!candidate) {
119
+ return;
120
+ }
121
+ const repoRoot = resolve(candidate);
122
+ if (repoRoots.has(repoRoot)) {
123
+ return;
124
+ }
125
+ repoRoots.add(repoRoot);
126
+ addUniquePath(binaryPaths, join(repoRoot, 'target', 'release', `${BROKER_NAME}${ext}`));
127
+ addUniquePath(binaryPaths, join(repoRoot, 'target', 'debug', `${BROKER_NAME}${ext}`));
128
+ };
129
+ addRepoRoot(process.cwd());
130
+ addRepoRoot(findAncestorSourceCheckoutRoot(process.cwd()));
131
+ const currentModuleDir = getCurrentModuleDir();
132
+ if (currentModuleDir) {
133
+ addRepoRoot(resolve(currentModuleDir, '..', '..', '..'));
134
+ }
135
+ return binaryPaths;
136
+ }
137
+ function isSourceCheckoutRoot(candidate) {
138
+ const repoRoot = resolve(candidate);
139
+ return (existsSync(join(repoRoot, 'Cargo.toml')) &&
140
+ existsSync(join(repoRoot, 'crates', 'broker', 'src', 'main.rs')) &&
141
+ existsSync(join(repoRoot, 'packages', 'runtime', 'package.json')));
142
+ }
143
+ function getSourceCheckoutBinaryPaths(ext) {
144
+ return getDevelopmentBinaryPaths(ext).filter((binaryPath) => isSourceCheckoutRoot(resolve(dirname(binaryPath), '..', '..')));
145
+ }
146
+ /**
147
+ * Resolve the agent-relay-broker binary path.
148
+ *
149
+ * Search order:
150
+ * 1. Explicit env override (BROKER_BINARY_PATH / AGENT_RELAY_BIN)
151
+ * 2. Local Cargo build when the runtime is loaded from an agent-relay source
152
+ * checkout
153
+ * 3. Platform-specific optional-dep package
154
+ * (`@agent-relay/broker-<platform>-<arch>`) — primary production path
155
+ * 4. Cargo development paths (target/release and target/debug)
156
+ * 5. PATH lookup via `which` / `where`
157
+ *
158
+ * @returns Absolute path to the broker binary, or null if not found
159
+ */
160
+ export function getBrokerBinaryPath() {
161
+ const ext = process.platform === 'win32' ? '.exe' : '';
162
+ const override = process.env.BROKER_BINARY_PATH ?? process.env.AGENT_RELAY_BIN;
163
+ if (override) {
164
+ const resolvedOverride = resolve(override);
165
+ if (existsSync(resolvedOverride)) {
166
+ return resolvedOverride;
167
+ }
168
+ }
169
+ // 1. Prefer a local Cargo build when this runtime is being used from a source checkout.
170
+ for (const developmentPath of getSourceCheckoutBinaryPaths(ext)) {
171
+ if (existsSync(developmentPath)) {
172
+ return developmentPath;
173
+ }
174
+ }
175
+ // 2. Platform-specific optional-dep package — the primary production path.
176
+ const optionalDepBinary = getOptionalDepBinaryPath(ext);
177
+ if (optionalDepBinary) {
178
+ return optionalDepBinary;
179
+ }
180
+ // 3. Common development paths for local Cargo builds.
181
+ for (const developmentPath of getDevelopmentBinaryPaths(ext)) {
182
+ if (existsSync(developmentPath)) {
183
+ return developmentPath;
184
+ }
185
+ }
186
+ // 4. PATH lookup.
187
+ try {
188
+ const cmd = process.platform === 'win32' ? 'where' : 'which';
189
+ const result = execFileSync(cmd, [BROKER_NAME], {
190
+ encoding: 'utf-8',
191
+ stdio: ['pipe', 'pipe', 'pipe'],
192
+ }).trim();
193
+ if (result) {
194
+ return result.split(/\r?\n/u)[0].trim();
195
+ }
196
+ }
197
+ catch {
198
+ // Not found on PATH
199
+ }
200
+ return null;
201
+ }
202
+ /**
203
+ * Human-readable error message explaining that the optional-dep broker
204
+ * package for the current platform/arch isn't installed. Used by the SDK
205
+ * at broker-spawn time so users get a clear message instead of an
206
+ * inscrutable `spawn agent-relay-broker ENOENT`.
207
+ */
208
+ export function formatBrokerNotFoundError() {
209
+ const pkgName = getOptionalDepPackageName();
210
+ return (`@agent-relay/harness-driver couldn't find an agent-relay-broker binary for ` +
211
+ `${process.platform}-${process.arch}. The optional dependency ` +
212
+ `${pkgName} is expected to be installed alongside @agent-relay/harness-driver. ` +
213
+ `Try reinstalling with --include=optional, or set BROKER_BINARY_PATH ` +
214
+ `to point at a broker binary you've downloaded manually.`);
215
+ }
216
+ //# sourceMappingURL=broker-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"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"}