@agent-relay/agent 0.1.0

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/dist/burn.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export interface BurnTags {
2
+ workspace: string;
3
+ agentId: string;
4
+ eventType: string;
5
+ eventId: string;
6
+ occurredAt: string;
7
+ }
8
+ export declare function withBurnTags<T>(tags: BurnTags, fn: () => Promise<T>): Promise<T>;
9
+ export declare function tagWithCurrentBurnTags<T>(value: T): T;
10
+ //# sourceMappingURL=burn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burn.d.ts","sourceRoot":"","sources":["../src/burn.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AA2BD,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGtF;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAGrD"}
package/dist/burn.js ADDED
@@ -0,0 +1,139 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const storage = new AsyncLocalStorage();
3
+ const BURN_SOURCE_HEADER = 'x-relayburn-source';
4
+ const BURN_TAG_HEADERS = {
5
+ workspace: 'x-relayburn-tag-workspace',
6
+ agentId: 'x-relayburn-tag-agent-id',
7
+ eventType: 'x-relayburn-tag-event-type',
8
+ eventId: 'x-relayburn-tag-event-id',
9
+ occurredAt: 'x-relayburn-tag-occurred-at',
10
+ };
11
+ const TRUSTED_PROVIDER_HOSTS = new Set(['api.openai.com', 'api.anthropic.com']);
12
+ const FETCH_WRAPPED = Symbol.for('@agent-relay/agent/burn-fetch-wrapped');
13
+ const CLIENT_WRAPPED = Symbol.for('@agent-relay/agent/burn-client-wrapped');
14
+ export async function withBurnTags(tags, fn) {
15
+ ensureGlobalFetchWrapped();
16
+ return await storage.run(tags, fn);
17
+ }
18
+ export function tagWithCurrentBurnTags(value) {
19
+ const tags = storage.getStore();
20
+ return tags ? tagValue(value, tags) : value;
21
+ }
22
+ function ensureGlobalFetchWrapped() {
23
+ if (typeof globalThis.fetch !== 'function') {
24
+ return;
25
+ }
26
+ const currentFetch = globalThis.fetch;
27
+ if (currentFetch[FETCH_WRAPPED]) {
28
+ return;
29
+ }
30
+ const original = currentFetch.bind(globalThis);
31
+ const wrapped = createTaggedFetch(original, () => storage.getStore() ?? null);
32
+ globalThis.fetch = wrapped;
33
+ }
34
+ function createTaggedFetch(fetchImpl, getTags) {
35
+ const wrapped = (async (input, init) => {
36
+ const tags = getTags();
37
+ if (!tags) {
38
+ return await fetchImpl(input, init);
39
+ }
40
+ const request = new Request(input, init);
41
+ if (!shouldTagRequest(request)) {
42
+ return await fetchImpl(request);
43
+ }
44
+ const headers = new Headers(request.headers);
45
+ headers.set(BURN_SOURCE_HEADER, 'agent-relay');
46
+ headers.set(BURN_TAG_HEADERS.workspace, tags.workspace);
47
+ headers.set(BURN_TAG_HEADERS.agentId, tags.agentId);
48
+ headers.set(BURN_TAG_HEADERS.eventType, tags.eventType);
49
+ headers.set(BURN_TAG_HEADERS.eventId, tags.eventId);
50
+ headers.set(BURN_TAG_HEADERS.occurredAt, tags.occurredAt);
51
+ return await fetchImpl(new Request(request, { headers }));
52
+ });
53
+ wrapped[FETCH_WRAPPED] = true;
54
+ return wrapped;
55
+ }
56
+ function shouldTagRequest(request) {
57
+ const url = new URL(request.url);
58
+ const host = url.hostname.toLowerCase();
59
+ if (TRUSTED_PROVIDER_HOSTS.has(host)) {
60
+ return true;
61
+ }
62
+ const headers = request.headers;
63
+ if (headers.has('anthropic-version') ||
64
+ headers.has('openai-beta') ||
65
+ headers.has('x-stainless-lang') ||
66
+ headers.has('x-stainless-package-version')) {
67
+ return true;
68
+ }
69
+ const path = url.pathname.replace(/\/+$/, '') || '/';
70
+ return (TRUSTED_PROVIDER_HOSTS.has(host) &&
71
+ (path === '/v1/chat/completions' ||
72
+ path === '/v1/responses' ||
73
+ path === '/v1/completions' ||
74
+ path === '/v1/embeddings' ||
75
+ path === '/v1/messages' ||
76
+ path === '/v1/messages/count_tokens' ||
77
+ path === '/v1/complete'));
78
+ }
79
+ function tagValue(value, tags) {
80
+ if (typeof value === 'function') {
81
+ return createTaggedFetch(value, () => tags);
82
+ }
83
+ if (!value || typeof value !== 'object') {
84
+ return value;
85
+ }
86
+ const client = value;
87
+ if (client[CLIENT_WRAPPED]) {
88
+ return value;
89
+ }
90
+ if (patchFetchProperty(client, 'fetch', tags)) {
91
+ client[CLIENT_WRAPPED] = true;
92
+ return value;
93
+ }
94
+ if (patchOptionsFetch(client, '_options', tags)) {
95
+ client[CLIENT_WRAPPED] = true;
96
+ return value;
97
+ }
98
+ if (patchOptionsFetch(client, 'options', tags)) {
99
+ client[CLIENT_WRAPPED] = true;
100
+ return value;
101
+ }
102
+ if (patchNestedClient(client, '_client', tags)) {
103
+ client[CLIENT_WRAPPED] = true;
104
+ return value;
105
+ }
106
+ return value;
107
+ }
108
+ function patchNestedClient(target, key, tags) {
109
+ const nested = target[key];
110
+ if (!nested || typeof nested !== 'object') {
111
+ return false;
112
+ }
113
+ const nestedClient = nested;
114
+ return (patchFetchProperty(nestedClient, 'fetch', tags) ||
115
+ patchOptionsFetch(nestedClient, '_options', tags) ||
116
+ patchOptionsFetch(nestedClient, 'options', tags));
117
+ }
118
+ function patchOptionsFetch(target, key, tags) {
119
+ const options = target[key];
120
+ if (!options || typeof options !== 'object') {
121
+ return false;
122
+ }
123
+ const record = options;
124
+ const existing = typeof record.fetch === 'function' ? record.fetch : globalThis.fetch;
125
+ if (typeof existing !== 'function') {
126
+ return false;
127
+ }
128
+ record.fetch = createTaggedFetch(existing, () => tags);
129
+ return true;
130
+ }
131
+ function patchFetchProperty(target, key, tags) {
132
+ const existing = target[key];
133
+ if (typeof existing !== 'function') {
134
+ return false;
135
+ }
136
+ target[key] = createTaggedFetch(existing.bind(target), () => tags);
137
+ return true;
138
+ }
139
+ //# sourceMappingURL=burn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burn.js","sourceRoot":"","sources":["../src/burn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type AgentEvent } from '@agent-relay/events';
2
+ import type { AgentPolicy, Context, Logger, RelaycastClient, RelaycronClient, RelayfileClient } from './types.js';
3
+ interface CreateContextFactoryOptions {
4
+ workspace: string;
5
+ agentId: string;
6
+ logger?: Logger;
7
+ getRelayfileClient?: () => RelayfileClient | null | undefined;
8
+ getRelaycastClient?: () => RelaycastClient | null | undefined;
9
+ getRelaycronClient?: () => RelaycronClient | null | undefined;
10
+ getOnceCoordinator?: () => {
11
+ acquireOnce(key: string): Promise<boolean>;
12
+ releaseOnce(key: string): Promise<void>;
13
+ } | null | undefined;
14
+ awaitApproval?: (approvalId: string) => Promise<unknown>;
15
+ policy?: AgentPolicy;
16
+ trackSchedule(id: string): void;
17
+ }
18
+ interface ContextFactory {
19
+ base: Context;
20
+ withEvent(signal: AbortSignal, event: AgentEvent): Context;
21
+ withSignal(signal: AbortSignal): Context;
22
+ }
23
+ /**
24
+ * Creates the shared base context plus per-dispatch signal overlays.
25
+ */
26
+ export declare function createContextFactory(options: CreateContextFactoryOptions): ContextFactory;
27
+ export {};
28
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EAGP,MAAM,EAEN,eAAe,EACf,eAAe,EAEf,eAAe,EAGhB,MAAM,YAAY,CAAC;AAIpB,UAAU,2BAA2B;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9D,kBAAkB,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9D,kBAAkB,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9D,kBAAkB,CAAC,EAAE,MACjB;QACE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACzC,GACD,IAAI,GACJ,SAAS,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3D,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAoIzF"}
@@ -0,0 +1,170 @@
1
+ import { createLogger } from '@agent-relay/events';
2
+ import { tagWithCurrentBurnTags } from './burn.js';
3
+ import { createPolicyGate } from './policy.js';
4
+ /**
5
+ * Creates the shared base context plus per-dispatch signal overlays.
6
+ */
7
+ export function createContextFactory(options) {
8
+ const logger = options.logger ??
9
+ createLogger({
10
+ workspace: options.workspace,
11
+ agentId: options.agentId,
12
+ level: 'debug',
13
+ });
14
+ const onceCache = new Map();
15
+ const relayfile = createRelayfileClientProxy(options.getRelayfileClient);
16
+ const relaycast = createRelaycastClientProxy(options.getRelaycastClient);
17
+ const idleController = new AbortController();
18
+ const policy = createPolicyGate({
19
+ workspace: options.workspace,
20
+ agentId: options.agentId,
21
+ policy: options.policy,
22
+ relayfile,
23
+ awaitApproval: options.awaitApproval,
24
+ });
25
+ const build = (signal, event) => ({
26
+ get raw() {
27
+ const relaycron = createRelaycronClientProxy(options.getRelaycronClient, options.trackSchedule);
28
+ return {
29
+ relayfile,
30
+ relaycron,
31
+ relaycast,
32
+ };
33
+ },
34
+ workspace: options.workspace,
35
+ agentId: options.agentId,
36
+ logger: event
37
+ ? bindContextLogger(logger, {
38
+ eventId: event.id,
39
+ eventType: event.type,
40
+ })
41
+ : logger,
42
+ signal,
43
+ tagged: (value) => tagWithCurrentBurnTags(value),
44
+ files: {
45
+ read: (path) => relayfile.read(path),
46
+ write: (path, body, meta) => policy.run('write', { path, body, ...(meta ? { meta } : {}) }, () => relayfile.write(path, body, meta)),
47
+ delete: (path) => policy.run('delete', { path }, () => relayfile.delete(path)),
48
+ list: (glob) => relayfile.list(glob),
49
+ },
50
+ messages: {
51
+ post: (channel, text, postOptions) => policy.run('external-message', { method: 'post', channel, text, ...(postOptions ? { opts: postOptions } : {}) }, () => relaycast.post(channel, text, postOptions)),
52
+ reply: (threadId, text, postOptions) => policy.run('external-message', { method: 'reply', threadId, text, ...(postOptions ? { opts: postOptions } : {}) }, () => relaycast.reply(threadId, text, postOptions)),
53
+ dm: (agentOrUser, text, postOptions) => policy.run('external-message', { method: 'dm', agentOrUser, text, ...(postOptions ? { opts: postOptions } : {}) }, () => relaycast.dm(agentOrUser, text, postOptions)),
54
+ },
55
+ schedule: {
56
+ at: async (when, payload) => policy.run('schedule', { method: 'at', when, ...(payload === undefined ? {} : { payload }) }, () => createRelaycronClientProxy(options.getRelaycronClient, options.trackSchedule).register({
57
+ at: when,
58
+ payload,
59
+ })),
60
+ every: async (cron, payload, scheduleOptions) => policy.run('schedule', {
61
+ method: 'every',
62
+ cron,
63
+ ...(payload === undefined ? {} : { payload }),
64
+ ...(scheduleOptions?.tz ? { tz: scheduleOptions.tz } : {}),
65
+ }, () => createRelaycronClientProxy(options.getRelaycronClient, options.trackSchedule).register({
66
+ cron,
67
+ payload,
68
+ tz: scheduleOptions?.tz,
69
+ })),
70
+ cancel: async (id) => policy.run('schedule', { method: 'cancel', id }, () => createRelaycronClientProxy(options.getRelaycronClient, options.trackSchedule).cancel(id)),
71
+ },
72
+ once: async (key, fn) => {
73
+ const existing = onceCache.get(key);
74
+ if (existing) {
75
+ return existing;
76
+ }
77
+ const onceCoordinator = options.getOnceCoordinator?.();
78
+ const pending = (async () => {
79
+ if (onceCoordinator) {
80
+ const acquired = await onceCoordinator.acquireOnce(key);
81
+ if (!acquired) {
82
+ return undefined;
83
+ }
84
+ }
85
+ try {
86
+ return await fn();
87
+ }
88
+ catch (error) {
89
+ if (onceCoordinator) {
90
+ await onceCoordinator.releaseOnce(key);
91
+ }
92
+ onceCache.delete(key);
93
+ throw error;
94
+ }
95
+ })();
96
+ onceCache.set(key, pending);
97
+ return pending;
98
+ },
99
+ });
100
+ return {
101
+ base: build(idleController.signal),
102
+ withEvent: (signal, event) => build(signal, event),
103
+ withSignal: (signal) => build(signal),
104
+ };
105
+ }
106
+ function createRelayfileClientProxy(getClient) {
107
+ const resolveClient = () => {
108
+ const relayfile = getClient?.();
109
+ if (!relayfile) {
110
+ throw new Error('relayfile control plane is not ready yet');
111
+ }
112
+ return relayfile;
113
+ };
114
+ return {
115
+ get available() {
116
+ return getClient?.()?.available ?? false;
117
+ },
118
+ read: async (path) => resolveClient().read(path),
119
+ write: async (path, body, meta) => resolveClient().write(path, body, meta),
120
+ delete: async (path) => resolveClient().delete(path),
121
+ list: async (glob) => resolveClient().list(glob),
122
+ };
123
+ }
124
+ function createRelaycastClientProxy(getClient) {
125
+ const resolveClient = () => {
126
+ const relaycast = getClient?.();
127
+ if (!relaycast) {
128
+ throw new Error('relaycast control plane is not ready yet');
129
+ }
130
+ return relaycast;
131
+ };
132
+ return {
133
+ get available() {
134
+ return getClient?.()?.available ?? false;
135
+ },
136
+ post: async (channel, text, opts) => resolveClient().post(channel, text, opts),
137
+ reply: async (threadId, text, opts) => resolveClient().reply(threadId, text, opts),
138
+ dm: async (agentOrUser, text, opts) => resolveClient().dm(agentOrUser, text, opts),
139
+ };
140
+ }
141
+ function createRelaycronClientProxy(getClient, trackSchedule) {
142
+ const resolveClient = () => {
143
+ const relaycron = getClient?.();
144
+ if (!relaycron) {
145
+ throw new Error('relaycron control plane is not ready yet');
146
+ }
147
+ return relaycron;
148
+ };
149
+ return {
150
+ get available() {
151
+ return getClient?.()?.available ?? false;
152
+ },
153
+ register: async (definition) => {
154
+ const result = await resolveClient().register(definition);
155
+ trackSchedule(result.id);
156
+ return result;
157
+ },
158
+ cancel: async (id) => resolveClient().cancel(id),
159
+ };
160
+ }
161
+ function bindContextLogger(logger, fields) {
162
+ const merge = (extra) => (extra ? { ...fields, ...extra } : { ...fields });
163
+ return {
164
+ debug: (message, extra) => logger.debug(message, merge(extra)),
165
+ info: (message, extra) => logger.info(message, merge(extra)),
166
+ warn: (message, extra) => logger.warn(message, merge(extra)),
167
+ error: (message, extra) => logger.error(message, merge(extra)),
168
+ };
169
+ }
170
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DeployHandle, HostedAgentDefinition } from './types.js';
2
+ /**
3
+ * Deploys a hosted agent definition to the managed runtime control plane.
4
+ */
5
+ export declare function deployAgent(definition: HostedAgentDefinition): Promise<DeployHandle>;
6
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,YAAY,EACZ,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AASpB;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CA4B1F"}
package/dist/deploy.js ADDED
@@ -0,0 +1,209 @@
1
+ const DEFAULT_RELAY_DEPLOY_URL = 'https://api.relaycast.dev';
2
+ /**
3
+ * Deploys a hosted agent definition to the managed runtime control plane.
4
+ */
5
+ export async function deployAgent(definition) {
6
+ assertHostedDefinition(definition);
7
+ const apiKey = resolveHostedApiKey();
8
+ const payload = serializeHostedDefinition(definition);
9
+ const response = await hostedRequest(apiKey, 'POST', '/v1/hosted-agents/deployments', payload);
10
+ const created = normalizeDeployAgentResponse(response);
11
+ return {
12
+ agentId: created.agentId,
13
+ deployId: created.deployId,
14
+ status: async () => normalizeHostedAgentStatus(await hostedRequest(apiKey, 'GET', `/v1/hosted-agents/deployments/${encodeURIComponent(created.deployId)}`), created),
15
+ undeploy: async () => {
16
+ await hostedRequest(apiKey, 'DELETE', `/v1/hosted-agents/deployments/${encodeURIComponent(created.deployId)}`);
17
+ },
18
+ };
19
+ }
20
+ function assertHostedDefinition(definition) {
21
+ if (!definition.name.trim()) {
22
+ throw new Error('deployAgent.name is required');
23
+ }
24
+ if (!definition.workspace.trim()) {
25
+ throw new Error('deployAgent.workspace is required');
26
+ }
27
+ if (!definition.model.trim()) {
28
+ throw new Error('deployAgent.model is required');
29
+ }
30
+ if (!definition.instructions.trim()) {
31
+ throw new Error('deployAgent.instructions is required');
32
+ }
33
+ assertProvider(definition.provider);
34
+ if (definition.watch !== undefined) {
35
+ const watch = normalizeWatch(definition.watch);
36
+ if (watch.length === 0) {
37
+ throw new Error('deployAgent.watch must include at least one non-empty glob');
38
+ }
39
+ }
40
+ if (definition.inbox !== undefined) {
41
+ const inbox = normalizeInbox(definition.inbox);
42
+ if (inbox.length === 0) {
43
+ throw new Error('deployAgent.inbox must include at least one non-empty inbox target');
44
+ }
45
+ }
46
+ }
47
+ function assertProvider(provider) {
48
+ if (!provider || (provider.mode !== 'managed' && provider.mode !== 'byok')) {
49
+ throw new Error('deployAgent.provider.mode must be "managed" or "byok"');
50
+ }
51
+ if (provider.mode === 'byok' && !provider.secretRef?.trim()) {
52
+ throw new Error('deployAgent.provider.secretRef is required when provider.mode is byok');
53
+ }
54
+ }
55
+ function resolveHostedApiKey() {
56
+ const apiKey = process.env.RELAY_API_KEY?.trim();
57
+ if (!apiKey) {
58
+ throw new Error('RELAY_API_KEY is required');
59
+ }
60
+ return apiKey;
61
+ }
62
+ function resolveHostedDeployUrl() {
63
+ return (process.env.RELAY_HOSTED_AGENTS_URL?.trim() ||
64
+ process.env.RELAY_API_URL?.trim() ||
65
+ process.env.RELAY_BASE_URL?.trim() ||
66
+ process.env.RELAYCAST_URL?.trim() ||
67
+ DEFAULT_RELAY_DEPLOY_URL);
68
+ }
69
+ async function hostedRequest(apiKey, method, path, body) {
70
+ const response = await fetch(new URL(path, resolveHostedDeployUrl()), {
71
+ method,
72
+ headers: {
73
+ authorization: `Bearer ${apiKey}`,
74
+ ...(body ? { 'content-type': 'application/json' } : {}),
75
+ },
76
+ ...(body ? { body: JSON.stringify(body) } : {}),
77
+ });
78
+ if (!response.ok) {
79
+ const detail = await readErrorDetail(response);
80
+ throw new Error(`hosted agent request failed: ${response.status} ${response.statusText}${detail ? ` - ${detail}` : ''}`);
81
+ }
82
+ if (response.status === 204) {
83
+ return null;
84
+ }
85
+ return await response.json().catch(() => null);
86
+ }
87
+ async function readErrorDetail(response) {
88
+ const payload = (await response.json().catch(() => null));
89
+ if (typeof payload?.message === 'string' && payload.message.trim()) {
90
+ return payload.message.trim();
91
+ }
92
+ if (typeof payload?.error === 'string' && payload.error.trim()) {
93
+ return payload.error.trim();
94
+ }
95
+ return '';
96
+ }
97
+ function serializeHostedDefinition(definition) {
98
+ return {
99
+ name: definition.name.trim(),
100
+ workspace: definition.workspace.trim(),
101
+ model: definition.model.trim(),
102
+ instructions: definition.instructions.trim(),
103
+ ...(definition.schedule !== undefined ? { schedule: normalizeSchedules(definition.schedule) } : {}),
104
+ ...(definition.watch !== undefined ? { watch: normalizeWatch(definition.watch) } : {}),
105
+ ...(definition.inbox !== undefined ? { inbox: normalizeInbox(definition.inbox) } : {}),
106
+ ...(definition.policy ? { policy: serializePolicy(definition.policy) } : {}),
107
+ provider: serializeProvider(definition.provider),
108
+ runtime: definition.onEvent
109
+ ? {
110
+ mode: 'custom',
111
+ onEventSource: definition.onEvent.toString(),
112
+ }
113
+ : {
114
+ mode: 'default',
115
+ },
116
+ };
117
+ }
118
+ function serializePolicy(policy) {
119
+ return {
120
+ mode: policy.mode,
121
+ ...(policy.approvals ? { approvals: [...policy.approvals] } : {}),
122
+ };
123
+ }
124
+ function serializeProvider(provider) {
125
+ return {
126
+ mode: provider.mode,
127
+ ...(provider.secretRef?.trim() ? { secretRef: provider.secretRef.trim() } : {}),
128
+ };
129
+ }
130
+ function normalizeSchedules(schedule) {
131
+ const entries = Array.isArray(schedule) ? schedule : [schedule];
132
+ return entries.map((entry) => {
133
+ if (typeof entry === 'string') {
134
+ return entry.trim();
135
+ }
136
+ if ('cron' in entry) {
137
+ return entry.tz ? { cron: entry.cron, tz: entry.tz } : { cron: entry.cron };
138
+ }
139
+ return {
140
+ at: entry.at instanceof Date ? entry.at.toISOString() : entry.at,
141
+ };
142
+ });
143
+ }
144
+ function normalizeWatch(watch) {
145
+ return (Array.isArray(watch) ? watch : [watch])
146
+ .map((entry) => {
147
+ if (typeof entry !== 'string') {
148
+ throw new Error('deployAgent.watch must be a string or string[] of globs');
149
+ }
150
+ return entry.trim();
151
+ })
152
+ .filter(Boolean);
153
+ }
154
+ function normalizeInbox(inbox) {
155
+ return (Array.isArray(inbox) ? inbox : [inbox])
156
+ .map((entry) => {
157
+ if (typeof entry !== 'string') {
158
+ throw new Error('deployAgent.inbox must be a string or string[] of inbox targets');
159
+ }
160
+ const trimmed = entry.trim();
161
+ if (!trimmed) {
162
+ return '';
163
+ }
164
+ if (trimmed.startsWith('#') || trimmed.startsWith('@')) {
165
+ return trimmed;
166
+ }
167
+ return `#${trimmed}`;
168
+ })
169
+ .filter(Boolean);
170
+ }
171
+ function normalizeDeployAgentResponse(value) {
172
+ if (!value || typeof value !== 'object') {
173
+ throw new Error('hosted deploy response was missing agent and deployment identifiers');
174
+ }
175
+ const record = value;
176
+ const agentId = firstString(record, ['agentId', 'agent_id']);
177
+ const deployId = firstString(record, ['deployId', 'deploy_id', 'id']);
178
+ if (!agentId || !deployId) {
179
+ throw new Error('hosted deploy response was missing agentId or deployId');
180
+ }
181
+ return { agentId, deployId };
182
+ }
183
+ function normalizeHostedAgentStatus(value, fallback) {
184
+ if (!value || typeof value !== 'object') {
185
+ return {
186
+ agentId: fallback.agentId,
187
+ deployId: fallback.deployId,
188
+ state: 'unknown',
189
+ };
190
+ }
191
+ const record = value;
192
+ const state = firstString(record, ['state', 'status', 'phase']) ?? 'unknown';
193
+ return {
194
+ ...record,
195
+ agentId: firstString(record, ['agentId', 'agent_id']) ?? fallback.agentId,
196
+ deployId: firstString(record, ['deployId', 'deploy_id', 'id']) ?? fallback.deployId,
197
+ state,
198
+ };
199
+ }
200
+ function firstString(record, keys) {
201
+ for (const key of keys) {
202
+ const value = record[key];
203
+ if (typeof value === 'string' && value.trim()) {
204
+ return value.trim();
205
+ }
206
+ }
207
+ return null;
208
+ }
209
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AgentEvent } from '@agent-relay/events';
2
+ import type { Context } from './types.js';
3
+ interface DispatcherOptions {
4
+ concurrency: number;
5
+ handlerTimeoutMs: number;
6
+ createContext(signal: AbortSignal, event: AgentEvent): Context;
7
+ onEvent(ctx: Context, event: AgentEvent): Promise<void> | void;
8
+ }
9
+ interface Dispatcher {
10
+ dispatch(event: AgentEvent): Promise<void>;
11
+ close(): void;
12
+ abortActive(reason: Error): void;
13
+ drain(timeoutMs: number): Promise<boolean>;
14
+ }
15
+ /**
16
+ * Creates the single-handler dispatcher that enforces local concurrency limits.
17
+ */
18
+ export declare function createDispatcher(options: DispatcherOptions): Dispatcher;
19
+ export {};
20
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE;AAQD,UAAU,UAAU;IAClB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAkFvE"}