@agent-relay/factory 0.1.1 → 0.1.3
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 +145 -205
- package/dist/cli/fleet.d.ts +5 -1
- package/dist/cli/fleet.d.ts.map +1 -1
- package/dist/cli/fleet.js +152 -27
- package/dist/cli/fleet.js.map +1 -1
- package/dist/config/schema.d.ts +4 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +13 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/constants/linear.d.ts +2 -0
- package/dist/constants/linear.d.ts.map +1 -1
- package/dist/constants/linear.js +6 -0
- package/dist/constants/linear.js.map +1 -1
- package/dist/dispatch/templates.d.ts +18 -2
- package/dist/dispatch/templates.d.ts.map +1 -1
- package/dist/dispatch/templates.js +18 -10
- package/dist/dispatch/templates.js.map +1 -1
- package/dist/fleet/create-fleet.d.ts +3 -2
- package/dist/fleet/create-fleet.d.ts.map +1 -1
- package/dist/fleet/create-fleet.js +3 -2
- package/dist/fleet/create-fleet.js.map +1 -1
- package/dist/fleet/ensure-relay-broker.d.ts +24 -0
- package/dist/fleet/ensure-relay-broker.d.ts.map +1 -0
- package/dist/fleet/ensure-relay-broker.js +56 -0
- package/dist/fleet/ensure-relay-broker.js.map +1 -0
- package/dist/fleet/internal-fleet-client.d.ts +8 -3
- package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
- package/dist/fleet/internal-fleet-client.js +32 -5
- package/dist/fleet/internal-fleet-client.js.map +1 -1
- package/dist/fleet/relay-fleet-client.d.ts +90 -13
- package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
- package/dist/fleet/relay-fleet-client.js +496 -20
- package/dist/fleet/relay-fleet-client.js.map +1 -1
- package/dist/github/index.d.ts +4 -4
- package/dist/github/index.js +2 -2
- package/dist/github/probe-closer.d.ts +1 -1
- package/dist/github/probe-closer.js +1 -1
- package/dist/index.d.ts +33 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/linear/state-resolver.d.ts +3 -2
- package/dist/linear/state-resolver.d.ts.map +1 -1
- package/dist/linear/state-resolver.js +74 -10
- package/dist/linear/state-resolver.js.map +1 -1
- package/dist/mount/local-mount-preflight.d.ts +1 -0
- package/dist/mount/local-mount-preflight.d.ts.map +1 -1
- package/dist/mount/local-mount-preflight.js +64 -12
- package/dist/mount/local-mount-preflight.js.map +1 -1
- package/dist/mount/relayfile-binary.d.ts +2 -0
- package/dist/mount/relayfile-binary.d.ts.map +1 -1
- package/dist/mount/relayfile-binary.js +39 -5
- package/dist/mount/relayfile-binary.js.map +1 -1
- package/dist/mount/relayfile-cloud-mount-client.d.ts +2 -2
- package/dist/mount/relayfile-cloud-mount-client.js +1 -1
- package/dist/node/factory-node.d.ts +59 -0
- package/dist/node/factory-node.d.ts.map +1 -0
- package/dist/node/factory-node.js +351 -0
- package/dist/node/factory-node.js.map +1 -0
- package/dist/node/factory.node.d.ts +3 -0
- package/dist/node/factory.node.d.ts.map +1 -0
- package/dist/node/factory.node.js +5 -0
- package/dist/node/factory.node.js.map +1 -0
- package/dist/orchestrator/batch-tracker.d.ts +2 -2
- package/dist/orchestrator/factory.d.ts +5 -2
- package/dist/orchestrator/factory.d.ts.map +1 -1
- package/dist/orchestrator/factory.js +413 -59
- package/dist/orchestrator/factory.js.map +1 -1
- package/dist/orchestrator/index.d.ts +4 -4
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +3 -3
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/process-identity.d.ts +1 -1
- package/dist/orchestrator/reaper.d.ts +3 -3
- package/dist/orchestrator/reaper.js +3 -3
- package/dist/ports/fleet.d.ts +8 -2
- package/dist/ports/fleet.d.ts.map +1 -1
- package/dist/ports/index.d.ts +4 -4
- package/dist/ports/state.d.ts +3 -3
- package/dist/ports/writeback.d.ts +1 -1
- package/dist/safety/factory-scope.d.ts +2 -2
- package/dist/state/in-memory-state-store.d.ts +1 -1
- package/dist/state/in-memory-state-store.js +1 -1
- package/dist/subscriptions/event-client.d.ts +1 -1
- package/dist/subscriptions/event-client.js +2 -2
- package/dist/subscriptions/globs.js +1 -1
- package/dist/subscriptions/index.d.ts +7 -7
- package/dist/subscriptions/index.js +4 -4
- package/dist/subscriptions/linear-filter.d.ts +1 -1
- package/dist/subscriptions/linear-filter.js +1 -1
- package/dist/subscriptions/specs.d.ts +1 -1
- package/dist/subscriptions/specs.js +2 -2
- package/dist/testing/fakes.d.ts +1 -1
- package/dist/testing/fakes.js +1 -1
- package/dist/testing/fakes.js.map +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/triage/heuristic.d.ts +8 -4
- package/dist/triage/heuristic.d.ts.map +1 -1
- package/dist/triage/heuristic.js +70 -6
- package/dist/triage/heuristic.js.map +1 -1
- package/dist/triage/index.d.ts +6 -6
- package/dist/triage/index.d.ts.map +1 -1
- package/dist/triage/index.js +4 -4
- package/dist/triage/index.js.map +1 -1
- package/dist/triage/llm.d.ts +1 -1
- package/dist/triage/llm.d.ts.map +1 -1
- package/dist/triage/llm.js +5 -3
- package/dist/triage/llm.js.map +1 -1
- package/dist/triage/schema.d.ts +133 -29
- package/dist/triage/schema.d.ts.map +1 -1
- package/dist/triage/schema.js +6 -3
- package/dist/triage/schema.js.map +1 -1
- package/dist/triage/tiered.d.ts +1 -1
- package/dist/triage/tiered.d.ts.map +1 -1
- package/dist/triage/tiered.js +9 -2
- package/dist/triage/tiered.js.map +1 -1
- package/dist/types.d.ts +10 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/writeback/github.d.ts +2 -2
- package/dist/writeback/github.js +1 -1
- package/dist/writeback/index.d.ts +5 -5
- package/dist/writeback/index.js +3 -3
- package/dist/writeback/linear.d.ts +3 -3
- package/dist/writeback/linear.d.ts.map +1 -1
- package/dist/writeback/linear.js +57 -14
- package/dist/writeback/linear.js.map +1 -1
- package/dist/writeback/slack.d.ts +1 -1
- package/dist/writeback/slack.js +2 -2
- package/package.json +10 -2
- package/scripts/com.agentrelay.factory-canary.plist.example +53 -0
- 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 =
|
|
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
|
-
|
|
113
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"factory.node.d.ts","sourceRoot":"","sources":["../../src/node/factory.node.ts"],"names":[],"mappings":";AAEA,wBAEE"}
|
|
@@ -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 {
|
|
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":"AAGA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/orchestrator/factory.ts"],"names":[],"mappings":"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"}
|