@agent-relay/factory 0.1.1 → 0.1.2

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 (132) hide show
  1. package/README.md +146 -205
  2. package/dist/cli/fleet.d.ts +5 -1
  3. package/dist/cli/fleet.d.ts.map +1 -1
  4. package/dist/cli/fleet.js +86 -15
  5. package/dist/cli/fleet.js.map +1 -1
  6. package/dist/config/schema.d.ts +4 -4
  7. package/dist/config/schema.d.ts.map +1 -1
  8. package/dist/config/schema.js +13 -2
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/constants/linear.d.ts +2 -0
  11. package/dist/constants/linear.d.ts.map +1 -1
  12. package/dist/constants/linear.js +6 -0
  13. package/dist/constants/linear.js.map +1 -1
  14. package/dist/dispatch/templates.d.ts +18 -2
  15. package/dist/dispatch/templates.d.ts.map +1 -1
  16. package/dist/dispatch/templates.js +18 -10
  17. package/dist/dispatch/templates.js.map +1 -1
  18. package/dist/fleet/create-fleet.d.ts +3 -2
  19. package/dist/fleet/create-fleet.d.ts.map +1 -1
  20. package/dist/fleet/create-fleet.js +3 -2
  21. package/dist/fleet/create-fleet.js.map +1 -1
  22. package/dist/fleet/ensure-relay-broker.d.ts +24 -0
  23. package/dist/fleet/ensure-relay-broker.d.ts.map +1 -0
  24. package/dist/fleet/ensure-relay-broker.js +56 -0
  25. package/dist/fleet/ensure-relay-broker.js.map +1 -0
  26. package/dist/fleet/internal-fleet-client.d.ts +8 -3
  27. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  28. package/dist/fleet/internal-fleet-client.js +32 -5
  29. package/dist/fleet/internal-fleet-client.js.map +1 -1
  30. package/dist/fleet/relay-fleet-client.d.ts +90 -13
  31. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  32. package/dist/fleet/relay-fleet-client.js +496 -20
  33. package/dist/fleet/relay-fleet-client.js.map +1 -1
  34. package/dist/github/index.d.ts +4 -4
  35. package/dist/github/index.js +2 -2
  36. package/dist/github/probe-closer.d.ts +1 -1
  37. package/dist/github/probe-closer.js +1 -1
  38. package/dist/index.d.ts +33 -29
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +17 -15
  41. package/dist/index.js.map +1 -1
  42. package/dist/linear/state-resolver.d.ts +3 -2
  43. package/dist/linear/state-resolver.d.ts.map +1 -1
  44. package/dist/linear/state-resolver.js +74 -10
  45. package/dist/linear/state-resolver.js.map +1 -1
  46. package/dist/mount/local-mount-preflight.d.ts +1 -0
  47. package/dist/mount/local-mount-preflight.d.ts.map +1 -1
  48. package/dist/mount/local-mount-preflight.js +64 -12
  49. package/dist/mount/local-mount-preflight.js.map +1 -1
  50. package/dist/mount/relayfile-binary.d.ts +2 -0
  51. package/dist/mount/relayfile-binary.d.ts.map +1 -1
  52. package/dist/mount/relayfile-binary.js +39 -5
  53. package/dist/mount/relayfile-binary.js.map +1 -1
  54. package/dist/mount/relayfile-cloud-mount-client.d.ts +2 -2
  55. package/dist/mount/relayfile-cloud-mount-client.js +1 -1
  56. package/dist/node/factory-node.d.ts +59 -0
  57. package/dist/node/factory-node.d.ts.map +1 -0
  58. package/dist/node/factory-node.js +351 -0
  59. package/dist/node/factory-node.js.map +1 -0
  60. package/dist/node/factory.node.d.ts +3 -0
  61. package/dist/node/factory.node.d.ts.map +1 -0
  62. package/dist/node/factory.node.js +5 -0
  63. package/dist/node/factory.node.js.map +1 -0
  64. package/dist/orchestrator/batch-tracker.d.ts +2 -2
  65. package/dist/orchestrator/factory.d.ts +5 -2
  66. package/dist/orchestrator/factory.d.ts.map +1 -1
  67. package/dist/orchestrator/factory.js +413 -59
  68. package/dist/orchestrator/factory.js.map +1 -1
  69. package/dist/orchestrator/index.d.ts +4 -4
  70. package/dist/orchestrator/index.d.ts.map +1 -1
  71. package/dist/orchestrator/index.js +3 -3
  72. package/dist/orchestrator/index.js.map +1 -1
  73. package/dist/orchestrator/process-identity.d.ts +1 -1
  74. package/dist/orchestrator/reaper.d.ts +3 -3
  75. package/dist/orchestrator/reaper.js +3 -3
  76. package/dist/ports/fleet.d.ts +8 -2
  77. package/dist/ports/fleet.d.ts.map +1 -1
  78. package/dist/ports/index.d.ts +4 -4
  79. package/dist/ports/state.d.ts +3 -3
  80. package/dist/ports/writeback.d.ts +1 -1
  81. package/dist/safety/factory-scope.d.ts +2 -2
  82. package/dist/state/in-memory-state-store.d.ts +1 -1
  83. package/dist/state/in-memory-state-store.js +1 -1
  84. package/dist/subscriptions/event-client.d.ts +1 -1
  85. package/dist/subscriptions/event-client.js +2 -2
  86. package/dist/subscriptions/globs.js +1 -1
  87. package/dist/subscriptions/index.d.ts +7 -7
  88. package/dist/subscriptions/index.js +4 -4
  89. package/dist/subscriptions/linear-filter.d.ts +1 -1
  90. package/dist/subscriptions/linear-filter.js +1 -1
  91. package/dist/subscriptions/specs.d.ts +1 -1
  92. package/dist/subscriptions/specs.js +2 -2
  93. package/dist/testing/fakes.d.ts +1 -1
  94. package/dist/testing/fakes.js +1 -1
  95. package/dist/testing/fakes.js.map +1 -1
  96. package/dist/testing/index.d.ts +1 -1
  97. package/dist/testing/index.js +1 -1
  98. package/dist/triage/heuristic.d.ts +8 -4
  99. package/dist/triage/heuristic.d.ts.map +1 -1
  100. package/dist/triage/heuristic.js +70 -6
  101. package/dist/triage/heuristic.js.map +1 -1
  102. package/dist/triage/index.d.ts +6 -6
  103. package/dist/triage/index.d.ts.map +1 -1
  104. package/dist/triage/index.js +4 -4
  105. package/dist/triage/index.js.map +1 -1
  106. package/dist/triage/llm.d.ts +1 -1
  107. package/dist/triage/llm.d.ts.map +1 -1
  108. package/dist/triage/llm.js +5 -3
  109. package/dist/triage/llm.js.map +1 -1
  110. package/dist/triage/schema.d.ts +133 -29
  111. package/dist/triage/schema.d.ts.map +1 -1
  112. package/dist/triage/schema.js +6 -3
  113. package/dist/triage/schema.js.map +1 -1
  114. package/dist/triage/tiered.d.ts +1 -1
  115. package/dist/triage/tiered.d.ts.map +1 -1
  116. package/dist/triage/tiered.js +9 -2
  117. package/dist/triage/tiered.js.map +1 -1
  118. package/dist/types.d.ts +10 -9
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/writeback/github.d.ts +2 -2
  121. package/dist/writeback/github.js +1 -1
  122. package/dist/writeback/index.d.ts +5 -5
  123. package/dist/writeback/index.js +3 -3
  124. package/dist/writeback/linear.d.ts +3 -3
  125. package/dist/writeback/linear.d.ts.map +1 -1
  126. package/dist/writeback/linear.js +57 -14
  127. package/dist/writeback/linear.js.map +1 -1
  128. package/dist/writeback/slack.d.ts +1 -1
  129. package/dist/writeback/slack.js +2 -2
  130. package/package.json +10 -2
  131. package/scripts/com.agentrelay.factory-canary.plist.example +53 -0
  132. package/scripts/factory-canary.sh +89 -0
@@ -1,7 +1,14 @@
1
1
  import { accessSync, constants, readFileSync } from 'node:fs';
2
2
  import { dirname, join, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ // ESM has no __dirname; derive this module's directory for the default search
5
+ // start (used when no caller-supplied deployment dir is available).
6
+ const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
3
7
  const STALE_RECONCILE_MS = 15 * 60 * 1000;
4
8
  const NOT_FOUND_ERROR = '[factory] relayfile-mount binary not found. Install dependencies or run: npm run relayfile-mount:install';
9
+ export function coercePid(value) {
10
+ return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;
11
+ }
5
12
  function canExecute(filePath) {
6
13
  if (!filePath)
7
14
  return false;
@@ -61,7 +68,7 @@ function optionalPackageCandidates(pearRoot) {
61
68
  join(pearRoot, 'node_modules', '@relayfile', 'sdk', 'node_modules', '@relayfile', `mount-${suffix}`, 'bin', binaryName()),
62
69
  ];
63
70
  }
64
- export function resolveRelayfileMountBinary(startDir = __dirname) {
71
+ export function resolveRelayfileMountBinary(startDir = MODULE_DIR) {
65
72
  if (process.env.RELAYFILE_MOUNT_BIN) {
66
73
  const explicitBinary = resolve(process.env.RELAYFILE_MOUNT_BIN);
67
74
  if (canExecute(explicitBinary))
@@ -82,6 +89,29 @@ export function resolveRelayfileMountBinary(startDir = __dirname) {
82
89
  }
83
90
  throw new Error(NOT_FOUND_ERROR);
84
91
  }
92
+ function cliName() {
93
+ return process.platform === 'win32' ? 'relayfile.exe' : 'relayfile';
94
+ }
95
+ // The `relayfile` CLI (as opposed to the raw relayfile-mount binary) resolves
96
+ // workspace credentials itself and bundles an up-to-date mount, so the factory
97
+ // can start/refresh the writeback mount without plumbing a token — and without
98
+ // depending on a possibly-stale @relayfile/mount-* node_modules binary. Prefer
99
+ // it; fall back to the raw binary only when no CLI is on PATH.
100
+ export function resolveRelayfileCli() {
101
+ const explicit = process.env.RELAYFILE_BIN;
102
+ if (explicit)
103
+ return canExecute(explicit) ? resolve(explicit) : undefined;
104
+ const exe = cliName();
105
+ const separator = process.platform === 'win32' ? ';' : ':';
106
+ for (const dir of (process.env.PATH ?? '').split(separator)) {
107
+ if (!dir)
108
+ continue;
109
+ const candidate = join(dir, exe);
110
+ if (canExecute(candidate))
111
+ return resolve(candidate);
112
+ }
113
+ return undefined;
114
+ }
85
115
  export function checkMountStaleness(stateFilePath, workspaceId,
86
116
  // Alternate identifiers that name the SAME workspace (e.g. the cloud-side
87
117
  // UUID for a `rw_` handle). The local mount records the cloud UUID in its
@@ -109,9 +139,8 @@ acceptableWorkspaceIds = []) {
109
139
  reason: `workspace mismatch: registered=${registeredWorkspaceId ?? 'unknown'} expected=${[...accepted].join('|')}`,
110
140
  };
111
141
  }
112
- const pid = typeof parsed.pid === 'number' && Number.isInteger(parsed.pid) && parsed.pid > 0
113
- ? parsed.pid
114
- : undefined;
142
+ // Prefer the top-level pid; fall back to the CLI-daemonized mount's daemon.pid.
143
+ const pid = coercePid(parsed.pid) ?? coercePid(parsed.daemon?.pid);
115
144
  const lastReconcileAt = typeof parsed.lastReconcileAt === 'string'
116
145
  ? Date.parse(parsed.lastReconcileAt)
117
146
  : NaN;
@@ -127,7 +156,12 @@ acceptableWorkspaceIds = []) {
127
156
  };
128
157
  }
129
158
  if (pid === undefined) {
130
- return { stale: true, reason: 'mount process pid is missing' };
159
+ // Neither a top-level pid nor daemon.pid was recorded. The fresh
160
+ // lastReconcileAt validated above is itself proof the mount is live and
161
+ // reconciling, so fall back to that rather than declaring a healthy mount
162
+ // stale and forcing a spurious refresh (which previously tore down the live
163
+ // mount and then failed to re-spawn).
164
+ return { stale: false };
131
165
  }
132
166
  try {
133
167
  process.kill(pid, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"relayfile-binary.js","sourceRoot":"","sources":["../../src/mount/relayfile-binary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relayfile-binary.js","sourceRoot":"","sources":["../../src/mount/relayfile-binary.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type ActiveWorkspaceDescriptor, type CloudSession, type CloudSessionOptions } from '@agent-relay/cloud';
2
2
  import { type ChangeEvent, type DeleteFileInput, type EventFeedResponse, type FileReadResponse, type GetEventsOptions, type ListTreeOptions, type ResourceAtEventResult, type OperationStatusResponse, type Subscription, type TreeResponse, type WriteFileInput, type WriteQueuedResponse } from '@relayfile/sdk';
3
- import type { EventPage, MountClient, ProviderSyncStatus, SubscribeOptions } from '../ports';
4
- import { type RelayfileEventClient, type TokenProvider } from '../subscriptions';
3
+ import type { EventPage, MountClient, ProviderSyncStatus, SubscribeOptions } from '../ports/index.js';
4
+ import { type RelayfileEventClient, type TokenProvider } from '../subscriptions/index.js';
5
5
  export declare const FACTORY_RELAYFILE_SCOPES: readonly ["relayfile:fs:read:/linear/issues/**", "relayfile:fs:write:/linear/issues/**", "relayfile:fs:read:/github/repos/**", "relayfile:fs:read:/slack/channels/**", "relayfile:fs:write:/slack/channels/**", "relayfile:fs:read:/slack/users/**"];
6
6
  export type CloudSessionProvider = (options?: CloudSessionOptions) => Promise<CloudSession>;
7
7
  export type ActiveWorkspaceResolver = (options?: {
@@ -1,6 +1,6 @@
1
1
  import { CloudAuthError, ensureCloudSession, resolveActiveWorkspace, } from '@agent-relay/cloud';
2
2
  import { RelayfileSetup, } from '@relayfile/sdk';
3
- import { createWorkspaceScopedEventClient, } from '../subscriptions';
3
+ import { createWorkspaceScopedEventClient, } from '../subscriptions/index.js';
4
4
  const DEFAULT_WORKSPACE_ID = 'rw_7ccfea89';
5
5
  const DEFAULT_AGENT_NAME = 'agent-relay-factory';
6
6
  export const FACTORY_RELAYFILE_SCOPES = [
@@ -0,0 +1,59 @@
1
+ import { type FleetNodeDefinition } from '@agent-relay/fleet';
2
+ import { type NodeConfig } from '../config/schema.js';
3
+ import { type AgentRelayMcpCommand } from '../fleet/internal-fleet-client.js';
4
+ export declare const FACTORY_NODE_CONFIG_ENV = "FACTORY_NODE_CONFIG";
5
+ export declare const AGENT_RELAY_FACTORY_NODE_CONFIG_ENV = "AGENT_RELAY_FACTORY_NODE_CONFIG";
6
+ export declare const DEFAULT_FACTORY_NODE_CONFIG_PATH = "factory.node.json";
7
+ export interface FactoryNodeDefinitionOptions {
8
+ config: NodeConfig;
9
+ name?: string;
10
+ maxAgents?: number;
11
+ tags?: string[];
12
+ version?: string;
13
+ workflowRunner?: WorkflowRunner;
14
+ resolveAgentRelayMcpCommand?: () => AgentRelayMcpCommand | undefined;
15
+ }
16
+ export interface WorkflowRunnerInput {
17
+ workflow: string;
18
+ cwd: string;
19
+ inputs: Record<string, unknown>;
20
+ invocationId?: string;
21
+ }
22
+ export interface WorkflowRunnerResult {
23
+ command: string;
24
+ args: string[];
25
+ cwd: string;
26
+ exitCode: number;
27
+ stdout: string;
28
+ stderr: string;
29
+ }
30
+ export type WorkflowRunner = (input: WorkflowRunnerInput) => Promise<WorkflowRunnerResult>;
31
+ export interface FactoryNodeInventoryAgent {
32
+ agent_id?: string;
33
+ name: string;
34
+ invocationId?: string;
35
+ session_ref?: string;
36
+ }
37
+ export interface FactoryNodeInventorySync {
38
+ type: 'inventory.sync';
39
+ workspaceId?: string;
40
+ clonePaths: Record<string, string>;
41
+ agents: FactoryNodeInventoryAgent[];
42
+ }
43
+ export declare function createFactoryNodeDefinition(options: FactoryNodeDefinitionOptions): FleetNodeDefinition;
44
+ export declare function readFactoryNodeConfigSync(configPath?: string): NodeConfig;
45
+ export declare function resolveFactoryNodeConfigPath(env?: NodeJS.ProcessEnv): string;
46
+ export declare function parseFactoryNodeConfig(input: unknown): NodeConfig;
47
+ /**
48
+ * Builds the `inventory.sync` payload a node emits on reconnect so the cloud can
49
+ * reconcile live agents against the node's advertised clone paths (AC3/AC5).
50
+ *
51
+ * Provisional surface: the wire-level reconnect/drain handshake is owned by the
52
+ * installed `agent-relay` sidecar, not this package — the sidecar calls this
53
+ * builder via the default node export to produce the reconcile payload. It is
54
+ * exported (and unit-proven) here so the payload shape stays pinned to NodeConfig
55
+ * even though no in-package handler invokes it directly.
56
+ */
57
+ export declare function factoryNodeInventorySync(config: NodeConfig, agents: FactoryNodeInventoryAgent[]): FactoryNodeInventorySync;
58
+ export declare function runRelayflowsWorkflow(input: WorkflowRunnerInput): Promise<WorkflowRunnerResult>;
59
+ //# sourceMappingURL=factory-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-node.d.ts","sourceRoot":"","sources":["../../src/node/factory-node.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0E,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAKrI,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACvF,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,gCAAgC,CAAA;AAGvC,eAAO,MAAM,uBAAuB,wBAAwB,CAAA;AAC5D,eAAO,MAAM,mCAAmC,oCAAoC,CAAA;AACpF,eAAO,MAAM,gCAAgC,sBAAsB,CAAA;AAuEnE,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,2BAA2B,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAA;CACrE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAE1F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,MAAM,EAAE,yBAAyB,EAAE,CAAA;CACpC;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,4BAA4B,GAAG,mBAAmB,CAkCtG;AAED,wBAAgB,yBAAyB,CAAC,UAAU,SAAiC,GAAG,UAAU,CAIjG;AAED,wBAAgB,4BAA4B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAOzF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CASjE;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAE,GAAG,wBAAwB,CAO1H;AA+ED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoCrG"}
@@ -0,0 +1,351 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { hostname } from 'node:os';
4
+ import { basename, dirname, join, resolve, sep } from 'node:path';
5
+ import { spawn as spawnProcess } from 'node:child_process';
6
+ import { action, defineNode } from '@agent-relay/fleet';
7
+ import { z } from 'zod';
8
+ import { loadFactoryConfig, NodeConfigSchema } from '../config/schema.js';
9
+ import { buildRelayMcpHarnessConfig, capabilityCli, resolveAgentRelayMcpCommand, } from '../fleet/internal-fleet-client.js';
10
+ export const FACTORY_NODE_CONFIG_ENV = 'FACTORY_NODE_CONFIG';
11
+ export const AGENT_RELAY_FACTORY_NODE_CONFIG_ENV = 'AGENT_RELAY_FACTORY_NODE_CONFIG';
12
+ export const DEFAULT_FACTORY_NODE_CONFIG_PATH = 'factory.node.json';
13
+ const factoryNodeCapabilities = ['spawn:claude', 'spawn:codex', 'workflow:run'];
14
+ const knownFactoryNodeCapabilities = new Set(factoryNodeCapabilities);
15
+ const requireForResolve = createRequire(import.meta.url);
16
+ const restartPolicySchema = z.object({
17
+ enabled: z.boolean().optional(),
18
+ max_restarts: z.number().int().min(0).optional(),
19
+ cooldown_ms: z.number().int().min(0).optional(),
20
+ max_consecutive_failures: z.number().int().min(0).optional(),
21
+ }).passthrough();
22
+ const spawnCapabilityInputSchema = z.object({
23
+ name: z.string().min(1).optional(),
24
+ agent: z.string().min(1).optional(),
25
+ repo: z.string().min(1).optional(),
26
+ clone_path: z.string().min(1).optional(),
27
+ clonePath: z.string().min(1).optional(),
28
+ cwd: z.string().min(1).optional(),
29
+ task: z.string().optional(),
30
+ model: z.string().min(1).optional(),
31
+ session_ref: z.string().min(1).optional(),
32
+ sessionRef: z.string().min(1).optional(),
33
+ invocationId: z.string().min(1).optional(),
34
+ invocation_id: z.string().min(1).optional(),
35
+ channels: z.array(z.string().min(1)).optional(),
36
+ channel: z.string().min(1).optional(),
37
+ args: z.array(z.string()).optional(),
38
+ restart_policy: restartPolicySchema.optional(),
39
+ restartPolicy: restartPolicySchema.optional(),
40
+ skip_relay_prompt: z.boolean().optional(),
41
+ }).passthrough().transform((input) => ({
42
+ ...input,
43
+ name: input.name ?? input.agent,
44
+ clonePath: input.clonePath ?? input.clone_path,
45
+ sessionRef: input.sessionRef ?? input.session_ref,
46
+ invocationId: input.invocationId ?? input.invocation_id,
47
+ channels: input.channels ?? (input.channel ? [input.channel] : undefined),
48
+ restartPolicy: input.restartPolicy ?? input.restart_policy,
49
+ }));
50
+ const workflowCapabilityInputSchema = z.object({
51
+ name: z.string().min(1).optional(),
52
+ agent: z.string().min(1).optional(),
53
+ repo: z.string().min(1).optional(),
54
+ clone_path: z.string().min(1).optional(),
55
+ clonePath: z.string().min(1).optional(),
56
+ cwd: z.string().min(1).optional(),
57
+ workflow: z.string().min(1),
58
+ inputs: z.record(z.unknown()).default({}),
59
+ invocationId: z.string().min(1).optional(),
60
+ invocation_id: z.string().min(1).optional(),
61
+ }).passthrough().transform((input) => ({
62
+ ...input,
63
+ name: input.name ?? input.agent,
64
+ clonePath: input.clonePath ?? input.clone_path,
65
+ invocationId: input.invocationId ?? input.invocation_id,
66
+ }));
67
+ export function createFactoryNodeDefinition(options) {
68
+ const config = options.config;
69
+ const capabilities = normalizeCapabilities(config.capabilities);
70
+ const metadata = nodeCapabilityMetadata(config);
71
+ const handlers = {};
72
+ for (const capability of capabilities) {
73
+ if (capability === 'workflow:run') {
74
+ handlers[capability] = action({
75
+ input: workflowCapabilityInputSchema,
76
+ metadata: { ...metadata, handler: 'relayflows' },
77
+ }, async (input, ctx) => runWorkflowCapability(input, ctx, {
78
+ config,
79
+ workflowRunner: options.workflowRunner ?? runRelayflowsWorkflow,
80
+ }));
81
+ continue;
82
+ }
83
+ handlers[capability] = action({
84
+ input: spawnCapabilityInputSchema,
85
+ metadata: { ...metadata, handler: 'harness', cli: capabilityCli[capability] },
86
+ }, async (input, ctx) => runSpawnCapability(capability, input, ctx, {
87
+ config,
88
+ resolveAgentRelayMcpCommand: options.resolveAgentRelayMcpCommand ?? resolveAgentRelayMcpCommand,
89
+ }));
90
+ }
91
+ return defineNode({
92
+ name: options.name ?? defaultFactoryNodeName(),
93
+ ...(options.maxAgents !== undefined ? { maxAgents: options.maxAgents } : {}),
94
+ capabilities: handlers,
95
+ tags: options.tags ?? defaultFactoryNodeTags(config),
96
+ version: options.version ?? 'factory-node-v1',
97
+ });
98
+ }
99
+ export function readFactoryNodeConfigSync(configPath = resolveFactoryNodeConfigPath()) {
100
+ const raw = readFileSync(configPath, 'utf8');
101
+ const parsed = JSON.parse(raw);
102
+ return parseFactoryNodeConfig(parsed);
103
+ }
104
+ export function resolveFactoryNodeConfigPath(env = process.env) {
105
+ return resolve(env[AGENT_RELAY_FACTORY_NODE_CONFIG_ENV] ??
106
+ env[FACTORY_NODE_CONFIG_ENV] ??
107
+ env.FACTORY_CONFIG ??
108
+ DEFAULT_FACTORY_NODE_CONFIG_PATH);
109
+ }
110
+ export function parseFactoryNodeConfig(input) {
111
+ const record = asRecord(input);
112
+ if ('nodeConfig' in record) {
113
+ return NodeConfigSchema.parse(record.nodeConfig);
114
+ }
115
+ if ('factoryConfig' in record || 'workspaceConfig' in record || 'repos' in record) {
116
+ return loadFactoryConfig(input).nodeConfig;
117
+ }
118
+ return NodeConfigSchema.parse(input);
119
+ }
120
+ /**
121
+ * Builds the `inventory.sync` payload a node emits on reconnect so the cloud can
122
+ * reconcile live agents against the node's advertised clone paths (AC3/AC5).
123
+ *
124
+ * Provisional surface: the wire-level reconnect/drain handshake is owned by the
125
+ * installed `agent-relay` sidecar, not this package — the sidecar calls this
126
+ * builder via the default node export to produce the reconcile payload. It is
127
+ * exported (and unit-proven) here so the payload shape stays pinned to NodeConfig
128
+ * even though no in-package handler invokes it directly.
129
+ */
130
+ export function factoryNodeInventorySync(config, agents) {
131
+ return {
132
+ type: 'inventory.sync',
133
+ workspaceId: config.workspaceId,
134
+ clonePaths: { ...config.clonePaths },
135
+ agents: agents.map((agent) => ({ ...agent })),
136
+ };
137
+ }
138
+ async function runSpawnCapability(capability, input, ctx, deps) {
139
+ if (!input.name) {
140
+ throw new Error(`${capability} requires name or agent`);
141
+ }
142
+ const cwd = resolveCheckoutPath(deps.config, input);
143
+ const cli = capabilityCli[capability];
144
+ const command = deps.resolveAgentRelayMcpCommand?.();
145
+ const spawnInput = {
146
+ name: input.name,
147
+ cli,
148
+ args: input.args,
149
+ channels: input.channels,
150
+ task: input.task,
151
+ model: input.model,
152
+ cwd,
153
+ continueFrom: input.sessionRef,
154
+ restartPolicy: input.restartPolicy,
155
+ };
156
+ const harnessConfig = command ? buildRelayMcpHarnessConfig(spawnInput, command) : undefined;
157
+ const agent = {
158
+ name: input.name,
159
+ runtime: 'pty',
160
+ cli,
161
+ ...(input.model ? { model: input.model } : {}),
162
+ ...(input.args && input.args.length > 0 ? { args: input.args } : {}),
163
+ ...(input.channels ? { channels: input.channels } : {}),
164
+ cwd,
165
+ ...(input.sessionRef ? { session_id: input.sessionRef } : {}),
166
+ ...(input.restartPolicy ? { restart_policy: input.restartPolicy } : {}),
167
+ ...(harnessConfig ? { harness_config: harnessConfig } : {}),
168
+ };
169
+ const output = await ctx.spawnAgent({
170
+ agent,
171
+ ...(input.task !== undefined ? { initialTask: input.task } : {}),
172
+ skipRelayPrompt: input.skip_relay_prompt ?? false,
173
+ invocationId: input.invocationId ?? ctx.invocationId,
174
+ });
175
+ return {
176
+ name: input.name,
177
+ capability,
178
+ cwd,
179
+ invocationId: input.invocationId ?? ctx.invocationId,
180
+ agent: output,
181
+ };
182
+ }
183
+ async function runWorkflowCapability(input, ctx, deps) {
184
+ const cwd = resolveCheckoutPath(deps.config, input);
185
+ const result = await deps.workflowRunner({
186
+ workflow: input.workflow,
187
+ cwd,
188
+ inputs: input.inputs,
189
+ invocationId: input.invocationId ?? ctx.invocationId,
190
+ });
191
+ return {
192
+ name: input.name ?? input.workflow,
193
+ capability: 'workflow:run',
194
+ workflow: input.workflow,
195
+ invocationId: input.invocationId ?? ctx.invocationId,
196
+ ...result,
197
+ cwd,
198
+ };
199
+ }
200
+ export async function runRelayflowsWorkflow(input) {
201
+ const { command, args } = resolveRelayflowsInvocation(input.workflow);
202
+ const childEnv = {
203
+ ...process.env,
204
+ RELAYFLOWS_INPUTS_JSON: JSON.stringify(input.inputs),
205
+ FACTORY_WORKFLOW_INPUTS_JSON: JSON.stringify(input.inputs),
206
+ ...(input.invocationId ? { RELAY_INVOCATION_ID: input.invocationId } : {}),
207
+ };
208
+ return await new Promise((resolvePromise, reject) => {
209
+ const child = spawnProcess(command, args, {
210
+ cwd: input.cwd,
211
+ env: childEnv,
212
+ stdio: ['ignore', 'pipe', 'pipe'],
213
+ });
214
+ let stdout = '';
215
+ let stderr = '';
216
+ child.stdout?.setEncoding('utf8');
217
+ child.stderr?.setEncoding('utf8');
218
+ child.stdout?.on('data', (chunk) => {
219
+ stdout += chunk;
220
+ });
221
+ child.stderr?.on('data', (chunk) => {
222
+ stderr += chunk;
223
+ });
224
+ child.on('error', reject);
225
+ child.on('close', (code) => {
226
+ const exitCode = code ?? 1;
227
+ const result = { command, args, cwd: input.cwd, exitCode, stdout, stderr };
228
+ if (exitCode === 0) {
229
+ resolvePromise(result);
230
+ return;
231
+ }
232
+ reject(new Error(`relayflows run ${input.workflow} failed with exit code ${exitCode}${stderr ? `: ${stderr.trim()}` : ''}`));
233
+ });
234
+ });
235
+ }
236
+ function resolveRelayflowsInvocation(workflow) {
237
+ if (process.env.RELAYFLOWS_BIN) {
238
+ return { command: process.env.RELAYFLOWS_BIN, args: ['run', workflow] };
239
+ }
240
+ try {
241
+ const packageJsonPath = requireForResolve.resolve('@relayflows/cli/package.json');
242
+ return { command: process.execPath, args: [join(dirname(packageJsonPath), 'dist', 'cli.js'), 'run', workflow] };
243
+ }
244
+ catch {
245
+ return { command: 'relayflows', args: ['run', workflow] };
246
+ }
247
+ }
248
+ function resolveCheckoutPath(config, input) {
249
+ const clonePaths = config.clonePaths;
250
+ const configuredPaths = new Set(Object.values(clonePaths).map((path) => resolve(path)));
251
+ const explicitPath = input.clonePath ?? input.cwd;
252
+ if (explicitPath) {
253
+ const resolved = resolve(explicitPath);
254
+ // Only honor a cloud-supplied path when it is advertised: it must be one of
255
+ // the configured clonePaths, or live under the configured cloneRoot. Empty
256
+ // clonePaths must NOT be treated as "allow all" — that would let the cloud
257
+ // direct spawns into arbitrary local directories (see F4).
258
+ if (configuredPaths.has(resolved) || isWithinCloneRoot(config, resolved)) {
259
+ return resolved;
260
+ }
261
+ throw new Error(`checkout path is not advertised by this node: ${explicitPath}`);
262
+ }
263
+ const repo = input.repo ?? repoFromInputs(input.inputs);
264
+ if (repo) {
265
+ const mapped = checkoutForRepo(config, repo);
266
+ if (mapped)
267
+ return mapped;
268
+ }
269
+ const paths = Object.values(clonePaths);
270
+ if (paths.length === 1) {
271
+ return resolve(paths[0]);
272
+ }
273
+ throw new Error(repo
274
+ ? `no checkout path configured for repo ${repo}`
275
+ : 'spawn requires repo, clonePath, cwd, or a NodeConfig with exactly one clonePath');
276
+ }
277
+ function isWithinCloneRoot(config, resolvedPath) {
278
+ if (!config.cloneRoot)
279
+ return false;
280
+ const root = resolve(config.cloneRoot);
281
+ if (resolvedPath === root)
282
+ return true;
283
+ const prefix = root.endsWith(sep) ? root : root + sep;
284
+ return resolvedPath.startsWith(prefix);
285
+ }
286
+ function checkoutForRepo(config, repo) {
287
+ const candidates = new Set([
288
+ repo,
289
+ repo.replace(/^\/+|\/+$/gu, ''),
290
+ basename(repo),
291
+ ]);
292
+ for (const [key, clonePath] of Object.entries(config.clonePaths)) {
293
+ if (candidates.has(key) || candidates.has(basename(key))) {
294
+ return resolve(clonePath);
295
+ }
296
+ }
297
+ if (config.cloneRoot) {
298
+ return resolve(join(config.cloneRoot, basename(repo)));
299
+ }
300
+ return undefined;
301
+ }
302
+ function repoFromInputs(inputs) {
303
+ if (!inputs)
304
+ return undefined;
305
+ for (const key of ['repo', 'repository', 'repoLabel', 'repo_label']) {
306
+ const value = inputs[key];
307
+ if (typeof value === 'string' && value.trim()) {
308
+ return value.trim();
309
+ }
310
+ }
311
+ return undefined;
312
+ }
313
+ function normalizeCapabilities(capabilities) {
314
+ const normalized = capabilities
315
+ .map((capability) => capability.trim())
316
+ .filter((capability) => knownFactoryNodeCapabilities.has(capability));
317
+ const unique = [...new Set(normalized)];
318
+ if (unique.length === 0) {
319
+ throw new Error('NodeConfig.capabilities must include at least one factory node capability');
320
+ }
321
+ return unique;
322
+ }
323
+ function nodeCapabilityMetadata(config) {
324
+ return {
325
+ factoryNode: true,
326
+ ...(config.workspaceId ? { workspaceId: config.workspaceId } : {}),
327
+ cloneRoot: config.cloneRoot ?? null,
328
+ clonePaths: jsonRecord(config.clonePaths),
329
+ dryRun: config.dryRun,
330
+ };
331
+ }
332
+ function jsonRecord(input) {
333
+ return Object.fromEntries(Object.entries(input).map(([key, value]) => [key, value]));
334
+ }
335
+ function defaultFactoryNodeTags(config) {
336
+ return [
337
+ 'factory',
338
+ ...(config.workspaceId ? [`workspace:${config.workspaceId}`] : []),
339
+ ...Object.keys(config.clonePaths).map((repo) => `repo:${repo}`),
340
+ ];
341
+ }
342
+ function defaultFactoryNodeName() {
343
+ return process.env.AGENT_RELAY_NODE_NAME || process.env.FACTORY_NODE_NAME || `factory-${hostname()}`;
344
+ }
345
+ function asRecord(value) {
346
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
347
+ return value;
348
+ }
349
+ throw new Error('factory node config must be a JSON object');
350
+ }
351
+ //# sourceMappingURL=factory-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-node.js","sourceRoot":"","sources":["../../src/node/factory-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@agent-relay/fleet").FleetNodeDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=factory.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.node.d.ts","sourceRoot":"","sources":["../../src/node/factory.node.ts"],"names":[],"mappings":";AAEA,wBAEE"}
@@ -0,0 +1,5 @@
1
+ import { createFactoryNodeDefinition, readFactoryNodeConfigSync } from './factory-node.js';
2
+ export default createFactoryNodeDefinition({
3
+ config: readFactoryNodeConfigSync(),
4
+ });
5
+ //# sourceMappingURL=factory.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.node.js","sourceRoot":"","sources":["../../src/node/factory.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAEvF,eAAe,2BAA2B,CAAC;IACzC,MAAM,EAAE,yBAAyB,EAAE;CACpC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import type { AgentSpec, SpawnResult } from '../ports';
2
- import type { DispatchResult, IssueRef, TriageDecision } from '../types';
1
+ import type { AgentSpec, SpawnResult } from '../ports/index.js';
2
+ import type { DispatchResult, IssueRef, TriageDecision } from '../types.js';
3
3
  export interface TrackedAgent {
4
4
  spec: AgentSpec;
5
5
  result?: SpawnResult;
@@ -1,5 +1,6 @@
1
- import { type FactoryConfig } from '../config/schema';
2
- import type { DispatchResult, Factory, FactoryEventPayload, FactoryPorts, FactoryStatus, FactoryStartOptions, FactoryLoopRunOptions, FactoryLoopHeartbeat, FactoryLoopLiveness, IterationReport, LinearIssue, TriageDecision } from '../types';
1
+ import { type FactoryConfig } from '../config/schema.js';
2
+ import type { ChangeEvent, MountClient } from '../ports/index.js';
3
+ import type { DispatchResult, Factory, FactoryEventPayload, FactoryPorts, FactoryStatus, FactoryStartOptions, FactoryLoopRunOptions, FactoryLoopHeartbeat, FactoryLoopLiveness, IterationReport, LinearIssue, TriageDecision } from '../types.js';
3
4
  type FactoryEvent = 'issue-queued' | 'dispatched' | 'issue-done' | 'writeback-verified' | 'error';
4
5
  type Listener = (payload: FactoryEventPayload) => void;
5
6
  type GithubIssueSource = {
@@ -37,6 +38,7 @@ export declare class FactoryLoop implements Factory {
37
38
  on(event: FactoryEvent, listener: Listener): () => void;
38
39
  }
39
40
  export declare function parseLinearIssue(path: string, content: unknown): LinearIssue;
41
+ export declare function readLinearIssueWithCanonicalFallback(mount: Pick<MountClient, 'readFile'>, path: string): Promise<LinearIssue>;
40
42
  export declare function parseGithubIssue(path: string, content: unknown): GithubIssueSource;
41
43
  export declare function readFactoryLoopHeartbeat(path?: string): Promise<FactoryLoopHeartbeat | undefined>;
42
44
  export declare function checkFactoryLoopLiveness(heartbeat: FactoryLoopHeartbeat | undefined, opts?: {
@@ -51,5 +53,6 @@ export declare const githubIssuePathParts: (path: string) => {
51
53
  slug?: string;
52
54
  } | undefined;
53
55
  export declare const keyFromPath: (path: string) => string;
56
+ export declare const changeEventPath: (event: ChangeEvent) => string | undefined;
54
57
  export {};
55
58
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/factory.ts"],"names":[],"mappings":"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"}