agent-relay 4.0.30 → 4.0.31
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 +88 -48
- package/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/index.cjs +99 -54
- package/dist/src/cli/bootstrap.d.ts +2 -1
- package/dist/src/cli/bootstrap.d.ts.map +1 -1
- package/dist/src/cli/bootstrap.js +223 -17
- package/dist/src/cli/bootstrap.js.map +1 -1
- package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
- package/dist/src/cli/commands/agent-management.js +1 -3
- package/dist/src/cli/commands/agent-management.js.map +1 -1
- package/dist/src/cli/commands/auth.d.ts.map +1 -1
- package/dist/src/cli/commands/auth.js +32 -3
- package/dist/src/cli/commands/auth.js.map +1 -1
- package/dist/src/cli/commands/cloud.d.ts.map +1 -1
- package/dist/src/cli/commands/cloud.js +242 -144
- package/dist/src/cli/commands/cloud.js.map +1 -1
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +11 -6
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/commands/messaging.d.ts.map +1 -1
- package/dist/src/cli/commands/messaging.js +1 -3
- package/dist/src/cli/commands/messaging.js.map +1 -1
- package/dist/src/cli/commands/monitoring.d.ts.map +1 -1
- package/dist/src/cli/commands/monitoring.js +5 -4
- package/dist/src/cli/commands/monitoring.js.map +1 -1
- package/dist/src/cli/commands/on.d.ts.map +1 -1
- package/dist/src/cli/commands/on.js +1 -3
- package/dist/src/cli/commands/on.js.map +1 -1
- package/dist/src/cli/commands/setup.d.ts.map +1 -1
- package/dist/src/cli/commands/setup.js +62 -7
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/commands/swarm.d.ts.map +1 -1
- package/dist/src/cli/commands/swarm.js +34 -4
- package/dist/src/cli/commands/swarm.js.map +1 -1
- package/dist/src/cli/index.js +9 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/lib/exit.d.ts +49 -0
- package/dist/src/cli/lib/exit.d.ts.map +1 -0
- package/dist/src/cli/lib/exit.js +73 -0
- package/dist/src/cli/lib/exit.js.map +1 -0
- package/dist/src/cli/lib/telemetry-helpers.d.ts +20 -0
- package/dist/src/cli/lib/telemetry-helpers.d.ts.map +1 -0
- package/dist/src/cli/lib/telemetry-helpers.js +31 -0
- package/dist/src/cli/lib/telemetry-helpers.js.map +1 -0
- package/node_modules/@agent-relay/cloud/package.json +2 -2
- package/node_modules/@agent-relay/config/package.json +1 -1
- package/node_modules/@agent-relay/hooks/package.json +4 -4
- package/node_modules/@agent-relay/sdk/dist/workflows/file-db.d.ts +62 -12
- package/node_modules/@agent-relay/sdk/dist/workflows/file-db.d.ts.map +1 -1
- package/node_modules/@agent-relay/sdk/dist/workflows/file-db.js +137 -47
- package/node_modules/@agent-relay/sdk/dist/workflows/file-db.js.map +1 -1
- package/node_modules/@agent-relay/sdk/package.json +2 -2
- package/node_modules/@agent-relay/telemetry/dist/client.d.ts +14 -2
- package/node_modules/@agent-relay/telemetry/dist/client.d.ts.map +1 -1
- package/node_modules/@agent-relay/telemetry/dist/client.js +22 -4
- package/node_modules/@agent-relay/telemetry/dist/client.js.map +1 -1
- package/node_modules/@agent-relay/telemetry/dist/events.d.ts +217 -10
- package/node_modules/@agent-relay/telemetry/dist/events.d.ts.map +1 -1
- package/node_modules/@agent-relay/telemetry/dist/events.js +11 -0
- package/node_modules/@agent-relay/telemetry/dist/events.js.map +1 -1
- package/node_modules/@agent-relay/telemetry/dist/index.d.ts +2 -2
- package/node_modules/@agent-relay/telemetry/dist/index.d.ts.map +1 -1
- package/node_modules/@agent-relay/telemetry/dist/index.js.map +1 -1
- package/node_modules/@agent-relay/telemetry/package.json +2 -2
- package/node_modules/@agent-relay/trajectory/package.json +2 -2
- package/node_modules/@agent-relay/user-directory/package.json +2 -2
- package/node_modules/@agent-relay/utils/package.json +2 -2
- package/node_modules/@relaycast/sdk/dist/version.d.ts +1 -1
- package/node_modules/@relaycast/sdk/dist/version.js +1 -1
- package/node_modules/@relaycast/sdk/node_modules/@relaycast/types/package.json +1 -1
- package/node_modules/@relaycast/sdk/package.json +2 -2
- package/node_modules/axios/CHANGELOG.md +166 -0
- package/node_modules/axios/README.md +210 -204
- package/node_modules/axios/dist/axios.js +92 -63
- package/node_modules/axios/dist/axios.js.map +1 -1
- package/node_modules/axios/dist/axios.min.js +2 -2
- package/node_modules/axios/dist/axios.min.js.map +1 -1
- package/node_modules/axios/dist/browser/axios.cjs +140 -101
- package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
- package/node_modules/axios/dist/esm/axios.js +140 -101
- package/node_modules/axios/dist/esm/axios.js.map +1 -1
- package/node_modules/axios/dist/esm/axios.min.js +2 -2
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
- package/node_modules/axios/dist/node/axios.cjs +199 -75
- package/node_modules/axios/dist/node/axios.cjs.map +1 -1
- package/node_modules/axios/index.d.cts +14 -28
- package/node_modules/axios/index.d.ts +132 -226
- package/node_modules/axios/lib/adapters/fetch.js +21 -6
- package/node_modules/axios/lib/adapters/http.js +88 -6
- package/node_modules/axios/lib/core/AxiosError.js +34 -33
- package/node_modules/axios/lib/core/AxiosHeaders.js +24 -25
- package/node_modules/axios/lib/core/buildFullPath.js +1 -1
- package/node_modules/axios/lib/core/mergeConfig.js +5 -3
- package/node_modules/axios/lib/defaults/index.js +13 -8
- package/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -2
- package/node_modules/axios/lib/helpers/formDataToJSON.js +3 -1
- package/node_modules/axios/lib/helpers/formDataToStream.js +2 -1
- package/node_modules/axios/lib/helpers/progressEventReducer.js +5 -5
- package/node_modules/axios/lib/helpers/resolveConfig.js +11 -3
- package/node_modules/axios/lib/helpers/shouldBypassProxy.js +48 -1
- package/node_modules/axios/lib/helpers/toFormData.js +10 -2
- package/node_modules/axios/lib/utils.js +10 -10
- package/node_modules/axios/package.json +4 -4
- package/package.json +9 -9
- package/packages/cloud/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/sdk/dist/workflows/file-db.d.ts +62 -12
- package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/file-db.js +137 -47
- package/packages/sdk/dist/workflows/file-db.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/telemetry/dist/client.d.ts +14 -2
- package/packages/telemetry/dist/client.d.ts.map +1 -1
- package/packages/telemetry/dist/client.js +22 -4
- package/packages/telemetry/dist/client.js.map +1 -1
- package/packages/telemetry/dist/events.d.ts +217 -10
- package/packages/telemetry/dist/events.d.ts.map +1 -1
- package/packages/telemetry/dist/events.js +11 -0
- package/packages/telemetry/dist/events.js.map +1 -1
- package/packages/telemetry/dist/index.d.ts +2 -2
- package/packages/telemetry/dist/index.d.ts.map +1 -1
- package/packages/telemetry/dist/index.js.map +1 -1
- package/packages/telemetry/package.json +2 -2
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/node_modules/@clack/prompts/node_modules/is-unicode-supported/index.d.ts +0 -12
- package/node_modules/@clack/prompts/node_modules/is-unicode-supported/index.js +0 -17
- package/node_modules/@clack/prompts/node_modules/is-unicode-supported/license +0 -9
- package/node_modules/@clack/prompts/node_modules/is-unicode-supported/package.json +0 -43
- package/node_modules/@clack/prompts/node_modules/is-unicode-supported/readme.md +0 -35
- package/node_modules/color-convert/CHANGELOG.md +0 -54
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-relay",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.31",
|
|
4
4
|
"description": "Real-time agent-to-agent communication system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -196,14 +196,14 @@
|
|
|
196
196
|
},
|
|
197
197
|
"homepage": "https://github.com/AgentWorkforce/relay#readme",
|
|
198
198
|
"dependencies": {
|
|
199
|
-
"@agent-relay/cloud": "4.0.
|
|
200
|
-
"@agent-relay/config": "4.0.
|
|
201
|
-
"@agent-relay/hooks": "4.0.
|
|
202
|
-
"@agent-relay/sdk": "4.0.
|
|
203
|
-
"@agent-relay/telemetry": "4.0.
|
|
204
|
-
"@agent-relay/trajectory": "4.0.
|
|
205
|
-
"@agent-relay/user-directory": "4.0.
|
|
206
|
-
"@agent-relay/utils": "4.0.
|
|
199
|
+
"@agent-relay/cloud": "4.0.31",
|
|
200
|
+
"@agent-relay/config": "4.0.31",
|
|
201
|
+
"@agent-relay/hooks": "4.0.31",
|
|
202
|
+
"@agent-relay/sdk": "4.0.31",
|
|
203
|
+
"@agent-relay/telemetry": "4.0.31",
|
|
204
|
+
"@agent-relay/trajectory": "4.0.31",
|
|
205
|
+
"@agent-relay/user-directory": "4.0.31",
|
|
206
|
+
"@agent-relay/utils": "4.0.31",
|
|
207
207
|
"@aws-sdk/client-s3": "3.1020.0",
|
|
208
208
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
209
209
|
"@relayauth/core": "^0.1.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/cloud",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.31",
|
|
4
4
|
"description": "Cloud SDK for Agent Relay — auth, workflow execution, and provider connections",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"test:watch": "vitest"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@agent-relay/config": "4.0.
|
|
26
|
+
"@agent-relay/config": "4.0.31",
|
|
27
27
|
"@aws-sdk/client-s3": "3.1020.0",
|
|
28
28
|
"ignore": "^7.0.5",
|
|
29
29
|
"tar": "^7.5.10"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/hooks",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.31",
|
|
4
4
|
"description": "Hook emitter, registry, and trajectory hooks for Agent Relay",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"test:watch": "vitest"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@agent-relay/config": "4.0.
|
|
41
|
-
"@agent-relay/trajectory": "4.0.
|
|
42
|
-
"@agent-relay/sdk": "4.0.
|
|
40
|
+
"@agent-relay/config": "4.0.31",
|
|
41
|
+
"@agent-relay/trajectory": "4.0.31",
|
|
42
|
+
"@agent-relay/sdk": "4.0.31"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/node": "^22.19.3",
|
|
@@ -1,30 +1,80 @@
|
|
|
1
1
|
import type { WorkflowRunRow, WorkflowStepRow } from './types.js';
|
|
2
2
|
import type { WorkflowDb } from './runner.js';
|
|
3
|
+
/**
|
|
4
|
+
* Optional hook: fired whenever a persistence write fails (e.g. EACCES,
|
|
5
|
+
* ENOSPC). Surfaced so the CLI, dashboard, or bootstrap can decide how
|
|
6
|
+
* to react beyond the single console.warn. Not called for the initial
|
|
7
|
+
* "directory unwritable" detection — that's stored in {@link isWritable}.
|
|
8
|
+
*/
|
|
9
|
+
export type DbWriteFailureListener = (err: unknown, filePath: string) => void;
|
|
10
|
+
export interface JsonFileWorkflowDbOptions {
|
|
11
|
+
/** Override the resolved filePath. Kept for tests / advanced callers. */
|
|
12
|
+
filePath?: string;
|
|
13
|
+
/** Notified on every underlying write error. */
|
|
14
|
+
onWriteFailure?: DbWriteFailureListener;
|
|
15
|
+
/**
|
|
16
|
+
* When true, if the preferred file path is unwritable, fall back to
|
|
17
|
+
* `$HOME/.agent-relay/workflow-runs-<basename>.jsonl` so `--resume`
|
|
18
|
+
* still works in environments where the workflow cwd is read-only
|
|
19
|
+
* (cloud sandboxes with restrictive workspace ACLs).
|
|
20
|
+
*
|
|
21
|
+
* Defaults to `false` — strict "write to this path or run in-memory"
|
|
22
|
+
* semantics, matching the pre-cache behavior. Opt-in via `true`.
|
|
23
|
+
*/
|
|
24
|
+
homeFallback?: boolean;
|
|
25
|
+
}
|
|
3
26
|
/**
|
|
4
27
|
* JSONL-backed WorkflowDb for the CLI.
|
|
5
28
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
29
|
+
* Design: the **in-memory cache is the single source of truth** for the
|
|
30
|
+
* process lifetime. Every mutation updates the cache synchronously and
|
|
31
|
+
* then best-effort appends to the jsonl file for durability / `--resume`.
|
|
32
|
+
*
|
|
33
|
+
* This matters because the runtime correctness of a running workflow
|
|
34
|
+
* must not depend on disk writes succeeding. If the storage path is
|
|
35
|
+
* unwritable (ACL-restricted workspace, full disk, ENOSPC), the workflow
|
|
36
|
+
* still progresses through its state machine correctly — we just lose
|
|
37
|
+
* the ability to resume a future process from that run.
|
|
38
|
+
*
|
|
39
|
+
* Read paths used to re-snapshot the jsonl on every call, which meant
|
|
40
|
+
* a failed `updateRun(..., { status: 'completed' })` would leave a
|
|
41
|
+
* subsequent `getRun` returning the stale 'running' row from disk.
|
|
42
|
+
* That bug surfaced as workflows passing per-step but reporting
|
|
43
|
+
* `status: 'running'` to callers.
|
|
9
44
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
45
|
+
* Storage path resolution:
|
|
46
|
+
* 1. Try the caller-supplied file path. If the parent directory is
|
|
47
|
+
* writable, use it.
|
|
48
|
+
* 2. If (1) fails and `homeFallback` is true (opt-in, default false),
|
|
49
|
+
* try `$HOME/.agent-relay/workflow-runs-<basename>.jsonl`. This is
|
|
50
|
+
* outside any workspace mount in cloud sandboxes and almost always
|
|
51
|
+
* writable by the agent.
|
|
52
|
+
* 3. If both fail, run in memory-only mode. The workflow still
|
|
53
|
+
* executes correctly; `--resume` won't be available for this run.
|
|
13
54
|
*
|
|
14
|
-
* File:
|
|
55
|
+
* File: `.agent-relay/workflow-runs.jsonl` in the workflow cwd by default.
|
|
15
56
|
*/
|
|
16
57
|
export declare class JsonFileWorkflowDb implements WorkflowDb {
|
|
17
58
|
private readonly filePath;
|
|
18
|
-
/** Whether
|
|
59
|
+
/** Whether persistence is active. False = in-memory-only mode. */
|
|
19
60
|
private readonly writable;
|
|
20
61
|
private appendFailedOnce;
|
|
21
|
-
|
|
22
|
-
/**
|
|
62
|
+
private readonly onWriteFailure?;
|
|
63
|
+
/**
|
|
64
|
+
* Authoritative in-memory mirror. Every mutation updates this; reads
|
|
65
|
+
* return from here. The jsonl file is only consulted at construction
|
|
66
|
+
* (to replay prior state for `--resume`) and is otherwise write-only.
|
|
67
|
+
*/
|
|
68
|
+
private readonly cache;
|
|
69
|
+
constructor(filePathOrOptions: string | JsonFileWorkflowDbOptions);
|
|
70
|
+
/** Returns false if persistence is not active (in-memory-only mode). */
|
|
23
71
|
isWritable(): boolean;
|
|
72
|
+
/** Resolved path on disk. For tests + diagnostics. */
|
|
73
|
+
getStoragePath(): string;
|
|
24
74
|
hasStepOutputs(runId: string): boolean;
|
|
75
|
+
private static resolveStoragePath;
|
|
76
|
+
private static loadSnapshot;
|
|
25
77
|
private append;
|
|
26
|
-
/** Read all lines and build the latest snapshot for each ID. */
|
|
27
|
-
private snapshot;
|
|
28
78
|
insertRun(run: WorkflowRunRow): Promise<void>;
|
|
29
79
|
updateRun(id: string, patch: Partial<WorkflowRunRow>): Promise<void>;
|
|
30
80
|
getRun(id: string): Promise<WorkflowRunRow | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-db.d.ts","sourceRoot":"","sources":["../../src/workflows/file-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-db.d.ts","sourceRoot":"","sources":["../../src/workflows/file-db.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAE9E,MAAM,WAAW,yBAAyB;IACxC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;IAEzD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;gBAEU,iBAAiB,EAAE,MAAM,GAAG,yBAAyB;IAiBjE,wEAAwE;IACxE,UAAU,IAAI,OAAO;IAIrB,sDAAsD;IACtD,cAAc,IAAI,MAAM;IAIxB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWtC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IA8CjC,OAAO,CAAC,MAAM,CAAC,YAAY;IA6B3B,OAAO,CAAC,MAAM;IAuBR,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIlD,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGjE"}
|
|
@@ -1,40 +1,69 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';
|
|
1
|
+
import { accessSync, appendFileSync, constants as fsConstants, existsSync, mkdirSync, readdirSync, readFileSync, } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
/**
|
|
4
5
|
* JSONL-backed WorkflowDb for the CLI.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Design: the **in-memory cache is the single source of truth** for the
|
|
8
|
+
* process lifetime. Every mutation updates the cache synchronously and
|
|
9
|
+
* then best-effort appends to the jsonl file for durability / `--resume`.
|
|
9
10
|
*
|
|
10
|
-
* This
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* This matters because the runtime correctness of a running workflow
|
|
12
|
+
* must not depend on disk writes succeeding. If the storage path is
|
|
13
|
+
* unwritable (ACL-restricted workspace, full disk, ENOSPC), the workflow
|
|
14
|
+
* still progresses through its state machine correctly — we just lose
|
|
15
|
+
* the ability to resume a future process from that run.
|
|
13
16
|
*
|
|
14
|
-
*
|
|
17
|
+
* Read paths used to re-snapshot the jsonl on every call, which meant
|
|
18
|
+
* a failed `updateRun(..., { status: 'completed' })` would leave a
|
|
19
|
+
* subsequent `getRun` returning the stale 'running' row from disk.
|
|
20
|
+
* That bug surfaced as workflows passing per-step but reporting
|
|
21
|
+
* `status: 'running'` to callers.
|
|
22
|
+
*
|
|
23
|
+
* Storage path resolution:
|
|
24
|
+
* 1. Try the caller-supplied file path. If the parent directory is
|
|
25
|
+
* writable, use it.
|
|
26
|
+
* 2. If (1) fails and `homeFallback` is true (opt-in, default false),
|
|
27
|
+
* try `$HOME/.agent-relay/workflow-runs-<basename>.jsonl`. This is
|
|
28
|
+
* outside any workspace mount in cloud sandboxes and almost always
|
|
29
|
+
* writable by the agent.
|
|
30
|
+
* 3. If both fail, run in memory-only mode. The workflow still
|
|
31
|
+
* executes correctly; `--resume` won't be available for this run.
|
|
32
|
+
*
|
|
33
|
+
* File: `.agent-relay/workflow-runs.jsonl` in the workflow cwd by default.
|
|
15
34
|
*/
|
|
16
35
|
export class JsonFileWorkflowDb {
|
|
17
36
|
filePath;
|
|
18
|
-
/** Whether
|
|
37
|
+
/** Whether persistence is active. False = in-memory-only mode. */
|
|
19
38
|
writable;
|
|
20
39
|
appendFailedOnce = false;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
40
|
+
onWriteFailure;
|
|
41
|
+
/**
|
|
42
|
+
* Authoritative in-memory mirror. Every mutation updates this; reads
|
|
43
|
+
* return from here. The jsonl file is only consulted at construction
|
|
44
|
+
* (to replay prior state for `--resume`) and is otherwise write-only.
|
|
45
|
+
*/
|
|
46
|
+
cache;
|
|
47
|
+
constructor(filePathOrOptions) {
|
|
48
|
+
const options = typeof filePathOrOptions === 'string' ? { filePath: filePathOrOptions } : filePathOrOptions;
|
|
49
|
+
this.onWriteFailure = options.onWriteFailure;
|
|
50
|
+
const requestedPath = options.filePath ?? path.join('.agent-relay', 'workflow-runs.jsonl');
|
|
51
|
+
const homeFallback = options.homeFallback ?? false;
|
|
52
|
+
const { resolvedPath, writable } = JsonFileWorkflowDb.resolveStoragePath(requestedPath, homeFallback);
|
|
53
|
+
this.filePath = resolvedPath;
|
|
32
54
|
this.writable = writable;
|
|
55
|
+
// Load existing state from disk (for --resume) once at construction.
|
|
56
|
+
// From this point on, the cache is authoritative.
|
|
57
|
+
this.cache = JsonFileWorkflowDb.loadSnapshot(this.filePath);
|
|
33
58
|
}
|
|
34
|
-
/** Returns false if
|
|
59
|
+
/** Returns false if persistence is not active (in-memory-only mode). */
|
|
35
60
|
isWritable() {
|
|
36
61
|
return this.writable;
|
|
37
62
|
}
|
|
63
|
+
/** Resolved path on disk. For tests + diagnostics. */
|
|
64
|
+
getStoragePath() {
|
|
65
|
+
return this.filePath;
|
|
66
|
+
}
|
|
38
67
|
hasStepOutputs(runId) {
|
|
39
68
|
try {
|
|
40
69
|
const dir = path.join(path.dirname(this.filePath), 'step-outputs', runId);
|
|
@@ -45,30 +74,53 @@ export class JsonFileWorkflowDb {
|
|
|
45
74
|
}
|
|
46
75
|
}
|
|
47
76
|
// ── Private helpers ─────────────────────────────────────────────────────
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
static resolveStoragePath(requestedPath, homeFallback) {
|
|
78
|
+
const candidates = [requestedPath];
|
|
79
|
+
if (homeFallback) {
|
|
80
|
+
const base = path.basename(requestedPath) || 'workflow-runs.jsonl';
|
|
81
|
+
candidates.push(path.join(os.homedir(), '.agent-relay', `workflow-runs-${base}`));
|
|
53
82
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
83
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
84
|
+
const candidate = candidates[i];
|
|
85
|
+
const isLastCandidate = i === candidates.length - 1;
|
|
86
|
+
try {
|
|
87
|
+
mkdirSync(path.dirname(candidate), { recursive: true });
|
|
88
|
+
// If there's a later fallback to try, actively probe writability
|
|
89
|
+
// so we know whether to move on. Two levels matter:
|
|
90
|
+
// 1. Directory must be writable to create the jsonl file.
|
|
91
|
+
// 2. If the jsonl file already exists, IT must also be writable
|
|
92
|
+
// — a writable directory does not guarantee a writable file.
|
|
93
|
+
// Relayfile-mount, for example, can sync a file and chmod it
|
|
94
|
+
// to 0o444 while leaving the parent dir at 0o755; the old
|
|
95
|
+
// dir-only check would accept the path and every append would
|
|
96
|
+
// then lazy-fail, bypassing the fallback.
|
|
97
|
+
// If this is already the last candidate, skip the probe and be
|
|
98
|
+
// optimistic — an unwritable path will surface as a lazy append()
|
|
99
|
+
// failure handled by the cache + onWriteFailure path. Matches the
|
|
100
|
+
// pre-cache "warn on first failure" semantic callers expect.
|
|
101
|
+
if (!isLastCandidate) {
|
|
102
|
+
accessSync(path.dirname(candidate), fsConstants.W_OK);
|
|
103
|
+
if (existsSync(candidate)) {
|
|
104
|
+
accessSync(candidate, fsConstants.W_OK);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return { resolvedPath: candidate, writable: true };
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Try the next candidate; if this was the last, fall through
|
|
111
|
+
// to memory-only.
|
|
62
112
|
}
|
|
63
113
|
}
|
|
114
|
+
// Memory-only mode. Path is reported for diagnostics but nothing
|
|
115
|
+
// is written to it.
|
|
116
|
+
return { resolvedPath: requestedPath, writable: false };
|
|
64
117
|
}
|
|
65
|
-
|
|
66
|
-
snapshot() {
|
|
118
|
+
static loadSnapshot(filePath) {
|
|
67
119
|
const runs = new Map();
|
|
68
120
|
const steps = new Map();
|
|
69
121
|
let raw = '';
|
|
70
122
|
try {
|
|
71
|
-
raw = readFileSync(
|
|
123
|
+
raw = readFileSync(filePath, 'utf8');
|
|
72
124
|
}
|
|
73
125
|
catch {
|
|
74
126
|
return { runs, steps };
|
|
@@ -92,34 +144,72 @@ export class JsonFileWorkflowDb {
|
|
|
92
144
|
}
|
|
93
145
|
return { runs, steps };
|
|
94
146
|
}
|
|
147
|
+
append(entry) {
|
|
148
|
+
if (!this.writable)
|
|
149
|
+
return;
|
|
150
|
+
try {
|
|
151
|
+
appendFileSync(this.filePath, JSON.stringify(entry) + '\n', 'utf8');
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
// Notify every failure so callers can aggregate / surface.
|
|
155
|
+
this.onWriteFailure?.(err, this.filePath);
|
|
156
|
+
// Warn to console once per process — subsequent failures are noise.
|
|
157
|
+
if (!this.appendFailedOnce) {
|
|
158
|
+
this.appendFailedOnce = true;
|
|
159
|
+
console.warn('[workflow] warning: failed to write run state to ' +
|
|
160
|
+
this.filePath +
|
|
161
|
+
' — --resume will not be available for this run. Use --start-from instead. ' +
|
|
162
|
+
'Error: ' +
|
|
163
|
+
(err instanceof Error ? err.message : String(err)));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
95
167
|
// ── WorkflowDb interface ─────────────────────────────────────────────────
|
|
96
168
|
async insertRun(run) {
|
|
169
|
+
// Shallow-copy so later mutations on the caller's object don't silently
|
|
170
|
+
// alias into the cache. Matches InMemoryWorkflowDb semantics. The runner
|
|
171
|
+
// keeps inserted rows in its own stepStates map and occasionally mutates
|
|
172
|
+
// state.row.status directly before calling updateRun — without this copy
|
|
173
|
+
// the mutation would land in the cache and bypass updateRun's
|
|
174
|
+
// updatedAt + append path, causing exactly the observability hazard this
|
|
175
|
+
// cache is meant to prevent.
|
|
176
|
+
this.cache.runs.set(run.id, { ...run });
|
|
97
177
|
this.append({ kind: 'run', row: run });
|
|
98
178
|
}
|
|
99
179
|
async updateRun(id, patch) {
|
|
100
|
-
const
|
|
101
|
-
const existing = runs.get(id);
|
|
180
|
+
const existing = this.cache.runs.get(id);
|
|
102
181
|
if (!existing)
|
|
103
182
|
return;
|
|
104
|
-
|
|
183
|
+
const updated = {
|
|
184
|
+
...existing,
|
|
185
|
+
...patch,
|
|
186
|
+
updatedAt: new Date().toISOString(),
|
|
187
|
+
};
|
|
188
|
+
this.cache.runs.set(id, updated);
|
|
189
|
+
this.append({ kind: 'run', row: updated });
|
|
105
190
|
}
|
|
106
191
|
async getRun(id) {
|
|
107
|
-
|
|
108
|
-
return runs.get(id) ?? null;
|
|
192
|
+
return this.cache.runs.get(id) ?? null;
|
|
109
193
|
}
|
|
110
194
|
async insertStep(step) {
|
|
195
|
+
// Shallow-copy to prevent caller-mutation aliasing — see insertRun.
|
|
196
|
+
this.cache.steps.set(step.id, { ...step });
|
|
111
197
|
this.append({ kind: 'step', row: step });
|
|
112
198
|
}
|
|
113
199
|
async updateStep(id, patch) {
|
|
114
|
-
const
|
|
115
|
-
const existing = steps.get(id);
|
|
200
|
+
const existing = this.cache.steps.get(id);
|
|
116
201
|
if (!existing)
|
|
117
202
|
return;
|
|
118
|
-
|
|
203
|
+
const updated = {
|
|
204
|
+
...existing,
|
|
205
|
+
...patch,
|
|
206
|
+
updatedAt: new Date().toISOString(),
|
|
207
|
+
};
|
|
208
|
+
this.cache.steps.set(id, updated);
|
|
209
|
+
this.append({ kind: 'step', row: updated });
|
|
119
210
|
}
|
|
120
211
|
async getStepsByRunId(runId) {
|
|
121
|
-
|
|
122
|
-
return Array.from(steps.values()).filter((s) => s.runId === runId);
|
|
212
|
+
return Array.from(this.cache.steps.values()).filter((s) => s.runId === runId);
|
|
123
213
|
}
|
|
124
214
|
}
|
|
125
215
|
//# sourceMappingURL=file-db.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-db.js","sourceRoot":"","sources":["../../src/workflows/file-db.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"file-db.js","sourceRoot":"","sources":["../../src/workflows/file-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/sdk",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.31",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
"@types/ws": "^8.5.10"
|
|
135
135
|
},
|
|
136
136
|
"dependencies": {
|
|
137
|
-
"@agent-relay/config": "4.0.
|
|
137
|
+
"@agent-relay/config": "4.0.31",
|
|
138
138
|
"@relaycast/sdk": "^1.1.0",
|
|
139
139
|
"@relayfile/sdk": "^0.1.2",
|
|
140
140
|
"@sinclair/typebox": "^0.34.48",
|
|
@@ -3,9 +3,21 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { getAnonymousId } from './config.js';
|
|
5
5
|
import type { TelemetryEventName, TelemetryEventMap } from './events.js';
|
|
6
|
-
export
|
|
6
|
+
export interface InitTelemetryOptions {
|
|
7
|
+
/** Whether to show the first-run telemetry notice. Default: true. */
|
|
7
8
|
showNotice?: boolean;
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The emitter's own CLI version, e.g. the root `agent-relay` package version.
|
|
11
|
+
* Pass this explicitly — the fallback auto-detection resolves the *telemetry*
|
|
12
|
+
* package's `package.json`, not the product's.
|
|
13
|
+
*/
|
|
14
|
+
cliVersion?: string;
|
|
15
|
+
/** Resolved `@agent-relay/sdk` version, if known. */
|
|
16
|
+
sdkVersion?: string;
|
|
17
|
+
/** `agent-relay-broker` Rust binary version, if known. */
|
|
18
|
+
brokerVersion?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function initTelemetry(options?: InitTelemetryOptions): void;
|
|
9
21
|
export declare function track<E extends TelemetryEventName>(event: E, properties?: TelemetryEventMap[E]): void;
|
|
10
22
|
export declare function shutdown(): Promise<void>;
|
|
11
23
|
export declare function isEnabled(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAEL,cAAc,EAKf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAoB,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAEL,cAAc,EAKf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAoB,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkF3F,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,IAAI,CA0BtE;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAWrG;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,wBAAgB,SAAS,IAAI;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAQA"}
|
|
@@ -23,7 +23,13 @@ function findPackageJson(startDir) {
|
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Fallback version reader — walks up from the telemetry package's own
|
|
28
|
+
* `__dirname`. In an installed layout this resolves to the telemetry
|
|
29
|
+
* package's `package.json`, which is NOT meaningful to the product.
|
|
30
|
+
* Prefer having the caller pass explicit versions via `initTelemetry()`.
|
|
31
|
+
*/
|
|
32
|
+
function getFallbackVersion() {
|
|
27
33
|
try {
|
|
28
34
|
const __filename = fileURLToPath(import.meta.url);
|
|
29
35
|
const __dirname = path.dirname(__filename);
|
|
@@ -38,9 +44,17 @@ function getVersion() {
|
|
|
38
44
|
}
|
|
39
45
|
return 'unknown';
|
|
40
46
|
}
|
|
41
|
-
function buildCommonProperties() {
|
|
47
|
+
function buildCommonProperties(versions) {
|
|
48
|
+
// The primary version depends on who's emitting: prefer CLI > broker > SDK
|
|
49
|
+
// > fallback. This keeps `agent_relay_version` meaningful for existing
|
|
50
|
+
// dashboards while the typed `cli_version`/`sdk_version`/`broker_version`
|
|
51
|
+
// fields carry the precise per-component versions.
|
|
52
|
+
const primary = versions.cliVersion ?? versions.brokerVersion ?? versions.sdkVersion ?? getFallbackVersion();
|
|
42
53
|
return {
|
|
43
|
-
agent_relay_version:
|
|
54
|
+
agent_relay_version: primary,
|
|
55
|
+
...(versions.cliVersion ? { cli_version: versions.cliVersion } : {}),
|
|
56
|
+
...(versions.sdkVersion ? { sdk_version: versions.sdkVersion } : {}),
|
|
57
|
+
...(versions.brokerVersion ? { broker_version: versions.brokerVersion } : {}),
|
|
44
58
|
os: process.platform,
|
|
45
59
|
os_version: os.release(),
|
|
46
60
|
node_version: process.version.slice(1),
|
|
@@ -79,7 +93,11 @@ export function initTelemetry(options = {}) {
|
|
|
79
93
|
flushInterval: 10000,
|
|
80
94
|
disableGeoip: false, // CLI runs on user's machine, so IP is correct for geo
|
|
81
95
|
});
|
|
82
|
-
commonProps = buildCommonProperties(
|
|
96
|
+
commonProps = buildCommonProperties({
|
|
97
|
+
cliVersion: options.cliVersion,
|
|
98
|
+
sdkVersion: options.sdkVersion,
|
|
99
|
+
brokerVersion: options.brokerVersion,
|
|
100
|
+
});
|
|
83
101
|
anonymousId = getAnonymousId();
|
|
84
102
|
}
|
|
85
103
|
export function track(event, properties) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,IAAI,MAAM,GAAmB,IAAI,CAAC;AAClC,IAAI,WAAW,GAA4B,IAAI,CAAC;AAChD,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,OAAO,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|