@rk0429/agentic-relay 3.3.0 → 3.5.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/README.md +29 -2
- package/dist/application/spawn-agents-service.js +23 -9
- package/dist/application/spawn-agents-service.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.js.map +1 -1
- package/dist/domain/redelegation.d.ts +2 -0
- package/dist/domain/redelegation.js +4 -0
- package/dist/domain/redelegation.js.map +1 -0
- package/dist/domain/routing.d.ts +4 -1
- package/dist/domain/routing.js +25 -3
- package/dist/domain/routing.js.map +1 -1
- package/dist/infrastructure/store/relay-store.d.ts +3 -1
- package/dist/infrastructure/store/relay-store.js +22 -0
- package/dist/infrastructure/store/relay-store.js.map +1 -1
- package/dist/interfaces/mcp/relay-mcp-server.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
`agentic-relay` is a TypeScript MCP server that launches Claude Code, Codex CLI,
|
|
4
4
|
and Gemini CLI through a single MCP endpoint. It now exposes both agent
|
|
5
|
-
execution tools
|
|
5
|
+
execution tools, Phase 2 task management tools, and Phase 3 task-type routing.
|
|
6
6
|
|
|
7
7
|
## Current scope
|
|
8
8
|
|
|
9
9
|
- Phase 1 foundation from `docs/requirements.md`
|
|
10
10
|
- Phase 2 task management from `docs/requirements.md`
|
|
11
|
+
- Phase 3 task-type routing from `docs/requirements.md`
|
|
11
12
|
- `relay mcp serve` over stdio
|
|
12
13
|
- Parallel `spawn_agents`
|
|
13
14
|
- Backend routing, depth guard, response persistence, and session metadata
|
|
14
15
|
- Automatic cross-backend handoff when `session_id` is resumed with a different backend
|
|
15
|
-
- Task CRUD, status transitions, dependency resolution, review flow, and `spawn_agents`/`task_id` linkage
|
|
16
|
+
- Task CRUD, status transitions, dependency resolution, review flow, and `spawn_agents`/`agents[].task_id` linkage
|
|
16
17
|
- Task write permissions scoped to the assigned task subtree, while reads remain open
|
|
17
18
|
- Task warnings for missing `acceptance_criteria`, with leaf tasks blocked from execution until criteria are defined
|
|
19
|
+
- `task_type`-based backend auto-selection and orchestration-only re-delegation
|
|
18
20
|
|
|
19
21
|
## Usage
|
|
20
22
|
|
|
@@ -43,6 +45,31 @@ and task payloads include `warnings` when `acceptance_criteria` is missing.
|
|
|
43
45
|
Leaf tasks cannot transition to `ready` or `in_progress` until their
|
|
44
46
|
`acceptance_criteria` is defined.
|
|
45
47
|
|
|
48
|
+
`spawn_agents` links task automation through `agents[].task_id`. When a given
|
|
49
|
+
agent entry includes `task_id`, only that task is auto-transitioned and
|
|
50
|
+
auto-assigned from the spawned session.
|
|
51
|
+
|
|
52
|
+
When `backend` is omitted, `spawn_agents` resolves it from `task_type`. The
|
|
53
|
+
default routing is `orchestration/document_writing/code_review -> claude` and
|
|
54
|
+
`research/document_review/code_writing -> codex`, with fallback to another
|
|
55
|
+
installed backend if the preferred one is unavailable. Only
|
|
56
|
+
`task_type="orchestration"` child agents receive `spawn_agents`; all other
|
|
57
|
+
task types are treated as leaf agents.
|
|
58
|
+
|
|
59
|
+
Routing can be customized through `.relay/config.json`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"routing": {
|
|
64
|
+
"research": "gemini",
|
|
65
|
+
"code_writing": "claude"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
When a `routing` entry exists for a `task_type`, it overrides the built-in
|
|
71
|
+
default for backend auto-selection.
|
|
72
|
+
|
|
46
73
|
## Use From This Workspace
|
|
47
74
|
|
|
48
75
|
This workspace is configured to consume the published package via
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { DepthLimitError } from "../core/errors.js";
|
|
3
3
|
import { getCurrentDepth, resolveMaxDepth, validateDepth } from "../domain/depth.js";
|
|
4
|
-
import {
|
|
4
|
+
import { canSpawnAgents } from "../domain/redelegation.js";
|
|
5
|
+
import { resolveBackend, validateRoutingRules } from "../domain/routing.js";
|
|
5
6
|
export class SpawnAgentsService {
|
|
6
7
|
dependencies;
|
|
7
8
|
constructor(dependencies) {
|
|
@@ -12,18 +13,22 @@ export class SpawnAgentsService {
|
|
|
12
13
|
const currentDepth = getCurrentDepth(env);
|
|
13
14
|
const maxDepth = resolveMaxDepth(input.max_depth, env);
|
|
14
15
|
validateDepth(currentDepth, maxDepth);
|
|
16
|
+
const relayConfig = await this.dependencies.store.readConfig();
|
|
17
|
+
const routingRules = validateRoutingRules(relayConfig?.routing);
|
|
15
18
|
const installedBackends = await this.dependencies.backendRegistry.detectInstalled();
|
|
16
19
|
return Promise.all(input.agents.map((agent) => this.spawnSingleAgent({
|
|
17
20
|
agent,
|
|
18
21
|
currentDepth,
|
|
19
22
|
maxDepth,
|
|
20
23
|
installedBackends,
|
|
24
|
+
routingRules,
|
|
21
25
|
signal: options.signal,
|
|
22
26
|
})));
|
|
23
27
|
}
|
|
24
28
|
async spawnSingleAgent(options) {
|
|
25
|
-
const { agent, currentDepth, maxDepth, installedBackends, signal } = options;
|
|
29
|
+
const { agent, currentDepth, maxDepth, installedBackends, routingRules, signal } = options;
|
|
26
30
|
const relaySessionId = randomUUID();
|
|
31
|
+
let routing;
|
|
27
32
|
try {
|
|
28
33
|
const resumeMetadata = agent.session_id
|
|
29
34
|
? await this.dependencies.store.readSessionMetadata(agent.session_id)
|
|
@@ -31,10 +36,11 @@ export class SpawnAgentsService {
|
|
|
31
36
|
const resumeResponse = agent.session_id && resumeMetadata
|
|
32
37
|
? await this.dependencies.store.readResponse(agent.session_id)
|
|
33
38
|
: null;
|
|
34
|
-
|
|
39
|
+
routing = resolveBackend({
|
|
35
40
|
explicitBackend: agent.backend ?? resumeMetadata?.backend,
|
|
36
41
|
taskType: agent.task_type,
|
|
37
42
|
installedBackends,
|
|
43
|
+
routingRules,
|
|
38
44
|
});
|
|
39
45
|
const handoff = createHandoffInfo({
|
|
40
46
|
requestedSessionId: agent.session_id,
|
|
@@ -97,7 +103,7 @@ export class SpawnAgentsService {
|
|
|
97
103
|
RELAY_CALL_DEPTH: String(currentDepth + 1),
|
|
98
104
|
RELAY_MAX_DEPTH: String(maxDepth),
|
|
99
105
|
RELAY_AGENT_ID: relaySessionId,
|
|
100
|
-
RELAY_ALLOW_SPAWN_AGENTS: agent.task_type
|
|
106
|
+
RELAY_ALLOW_SPAWN_AGENTS: canSpawnAgents(agent.task_type) ? "1" : "0",
|
|
101
107
|
},
|
|
102
108
|
signal,
|
|
103
109
|
});
|
|
@@ -117,6 +123,8 @@ export class SpawnAgentsService {
|
|
|
117
123
|
return await this.persistFailure({
|
|
118
124
|
relaySessionId,
|
|
119
125
|
agent,
|
|
126
|
+
backend: routing?.resolved,
|
|
127
|
+
routing,
|
|
120
128
|
taskService: this.dependencies.taskService,
|
|
121
129
|
error,
|
|
122
130
|
});
|
|
@@ -130,6 +138,7 @@ export class SpawnAgentsService {
|
|
|
130
138
|
relaySessionId: options.relaySessionId,
|
|
131
139
|
backend: options.backend,
|
|
132
140
|
backendSessionId: options.executionResult.backendSessionId,
|
|
141
|
+
taskType: options.agent.task_type,
|
|
133
142
|
cwd: this.dependencies.cwd,
|
|
134
143
|
createdAt: now,
|
|
135
144
|
updatedAt: now,
|
|
@@ -153,6 +162,7 @@ export class SpawnAgentsService {
|
|
|
153
162
|
return {
|
|
154
163
|
session_id: options.relaySessionId,
|
|
155
164
|
backend: options.backend,
|
|
165
|
+
task_type: options.agent.task_type,
|
|
156
166
|
summary,
|
|
157
167
|
full_response_path: responsePath,
|
|
158
168
|
status: "success",
|
|
@@ -163,7 +173,7 @@ export class SpawnAgentsService {
|
|
|
163
173
|
async persistFailure(options) {
|
|
164
174
|
const message = options.error instanceof Error ? options.error.message : String(options.error);
|
|
165
175
|
const responsePath = await this.dependencies.store.writeResponse(options.relaySessionId, message);
|
|
166
|
-
const backend = options.agent.backend ?? "claude";
|
|
176
|
+
const backend = options.backend ?? options.agent.backend ?? "claude";
|
|
167
177
|
await this.dependencies.store.appendLog(createLogEntry({
|
|
168
178
|
sessionId: options.relaySessionId,
|
|
169
179
|
taskId: options.agent.task_id,
|
|
@@ -172,6 +182,8 @@ export class SpawnAgentsService {
|
|
|
172
182
|
status: "error",
|
|
173
183
|
details: {
|
|
174
184
|
error: message,
|
|
185
|
+
task_type: options.agent.task_type,
|
|
186
|
+
fallback_reason: options.routing?.fallbackReason,
|
|
175
187
|
},
|
|
176
188
|
}));
|
|
177
189
|
if (options.agent.task_id) {
|
|
@@ -185,13 +197,15 @@ export class SpawnAgentsService {
|
|
|
185
197
|
return {
|
|
186
198
|
session_id: options.relaySessionId,
|
|
187
199
|
backend,
|
|
200
|
+
task_type: options.agent.task_type,
|
|
188
201
|
summary: summarize(message),
|
|
189
202
|
full_response_path: responsePath,
|
|
190
203
|
status: "error",
|
|
191
|
-
routing:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
204
|
+
routing: options.routing ??
|
|
205
|
+
{
|
|
206
|
+
resolved: backend,
|
|
207
|
+
fellBack: false,
|
|
208
|
+
},
|
|
195
209
|
};
|
|
196
210
|
}
|
|
197
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-agents-service.js","sourceRoot":"","sources":["../../src/application/spawn-agents-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn-agents-service.js","sourceRoot":"","sources":["../../src/application/spawn-agents-service.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare const BACKEND_TYPES: readonly ["claude", "codex", "gemini"];
|
|
|
2
2
|
export type BackendType = (typeof BACKEND_TYPES)[number];
|
|
3
3
|
export declare const TASK_TYPES: readonly ["orchestration", "research", "document_review", "code_writing", "document_writing", "code_review"];
|
|
4
4
|
export type TaskType = (typeof TASK_TYPES)[number];
|
|
5
|
+
export type RoutingRules = Partial<Record<TaskType, BackendType>>;
|
|
5
6
|
export type ExecutionStatus = "success" | "error";
|
|
6
7
|
export declare const TASK_STATUSES: readonly ["backlog", "ready", "in_progress", "review", "blocked", "done", "superseded", "archived"];
|
|
7
8
|
export type TaskStatus = (typeof TASK_STATUSES)[number];
|
|
@@ -128,6 +129,7 @@ export interface HandoffInfo {
|
|
|
128
129
|
export interface SpawnAgentResult {
|
|
129
130
|
session_id: string;
|
|
130
131
|
backend: BackendType;
|
|
132
|
+
task_type?: TaskType;
|
|
131
133
|
summary: string;
|
|
132
134
|
full_response_path: string;
|
|
133
135
|
status: ExecutionStatus;
|
|
@@ -138,11 +140,15 @@ export interface RelaySessionMetadata {
|
|
|
138
140
|
relaySessionId: string;
|
|
139
141
|
backend: BackendType;
|
|
140
142
|
backendSessionId: string;
|
|
143
|
+
taskType?: TaskType;
|
|
141
144
|
cwd: string;
|
|
142
145
|
createdAt: string;
|
|
143
146
|
updatedAt: string;
|
|
144
147
|
handoffFrom?: HandoffInfo;
|
|
145
148
|
}
|
|
149
|
+
export interface RelayConfig {
|
|
150
|
+
routing?: RoutingRules;
|
|
151
|
+
}
|
|
146
152
|
export interface LogEntry {
|
|
147
153
|
timestamp: string;
|
|
148
154
|
session_id: string;
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAGpE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,aAAa;CACL,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAGpE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,aAAa;CACL,CAAC;AAMX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS;IACT,OAAO;IACP,aAAa;IACb,QAAQ;IACR,SAAS;IACT,MAAM;IACN,YAAY;IACZ,UAAU;CACF,CAAC;AAGX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,qBAAqB;IACrB,eAAe;IACf,iBAAiB;IACjB,cAAc;CACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redelegation.js","sourceRoot":"","sources":["../../src/domain/redelegation.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,QAAmB;IAChD,OAAO,QAAQ,KAAK,eAAe,CAAC;AACtC,CAAC"}
|
package/dist/domain/routing.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { type BackendType, type RoutingInfo, type TaskType } from "../core/types.js";
|
|
1
|
+
import { type BackendType, type RoutingRules, type RoutingInfo, type TaskType } from "../core/types.js";
|
|
2
|
+
export declare const DEFAULT_ROUTING: Record<TaskType, BackendType>;
|
|
2
3
|
export declare function assertValidBackend(backend: string | undefined): backend is BackendType;
|
|
3
4
|
export declare function assertValidTaskType(taskType: string | undefined): taskType is TaskType;
|
|
4
5
|
export declare function resolveBackend(options: {
|
|
5
6
|
explicitBackend?: string;
|
|
6
7
|
taskType?: string;
|
|
7
8
|
installedBackends: BackendType[];
|
|
9
|
+
routingRules?: RoutingRules;
|
|
8
10
|
}): RoutingInfo;
|
|
11
|
+
export declare function validateRoutingRules(value: unknown): RoutingRules;
|
package/dist/domain/routing.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BACKEND_TYPES, TASK_TYPES, } from "../core/types.js";
|
|
2
2
|
import { BackendUnavailableError, ValidationError, } from "../core/errors.js";
|
|
3
|
-
const DEFAULT_ROUTING = {
|
|
3
|
+
export const DEFAULT_ROUTING = {
|
|
4
4
|
orchestration: "claude",
|
|
5
5
|
document_writing: "claude",
|
|
6
6
|
code_review: "claude",
|
|
@@ -16,7 +16,7 @@ export function assertValidTaskType(taskType) {
|
|
|
16
16
|
return taskType !== undefined && TASK_TYPES.includes(taskType);
|
|
17
17
|
}
|
|
18
18
|
export function resolveBackend(options) {
|
|
19
|
-
const { explicitBackend, taskType, installedBackends } = options;
|
|
19
|
+
const { explicitBackend, taskType, installedBackends, routingRules } = options;
|
|
20
20
|
if (installedBackends.length === 0) {
|
|
21
21
|
throw new BackendUnavailableError("No supported backend CLI is installed.");
|
|
22
22
|
}
|
|
@@ -38,7 +38,10 @@ export function resolveBackend(options) {
|
|
|
38
38
|
if (!taskType) {
|
|
39
39
|
throw new ValidationError("Either backend or task_type must be specified.");
|
|
40
40
|
}
|
|
41
|
-
const preferred =
|
|
41
|
+
const preferred = {
|
|
42
|
+
...DEFAULT_ROUTING,
|
|
43
|
+
...(routingRules ?? {}),
|
|
44
|
+
}[taskType];
|
|
42
45
|
if (installedBackends.includes(preferred)) {
|
|
43
46
|
return {
|
|
44
47
|
resolved: preferred,
|
|
@@ -55,4 +58,23 @@ export function resolveBackend(options) {
|
|
|
55
58
|
fallbackReason: `Preferred backend ${preferred} is not installed.`,
|
|
56
59
|
};
|
|
57
60
|
}
|
|
61
|
+
export function validateRoutingRules(value) {
|
|
62
|
+
if (value === undefined) {
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
66
|
+
throw new ValidationError("Routing config must be an object.");
|
|
67
|
+
}
|
|
68
|
+
const rules = {};
|
|
69
|
+
for (const [taskType, backend] of Object.entries(value)) {
|
|
70
|
+
if (!assertValidTaskType(taskType)) {
|
|
71
|
+
throw new ValidationError(`Unknown task_type in routing config: ${taskType}`);
|
|
72
|
+
}
|
|
73
|
+
if (typeof backend !== "string" || !assertValidBackend(backend)) {
|
|
74
|
+
throw new ValidationError(`Unknown backend in routing config for ${taskType}: ${String(backend)}`);
|
|
75
|
+
}
|
|
76
|
+
rules[taskType] = backend;
|
|
77
|
+
}
|
|
78
|
+
return rules;
|
|
79
|
+
}
|
|
58
80
|
//# sourceMappingURL=routing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/domain/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/domain/routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LogEntry, RelaySessionMetadata, TaskRecord } from "../../core/types.js";
|
|
1
|
+
import type { LogEntry, RelayConfig, RelaySessionMetadata, TaskRecord } from "../../core/types.js";
|
|
2
2
|
export declare class RelayStore {
|
|
3
3
|
readonly rootDir: string;
|
|
4
4
|
constructor(rootDir: string);
|
|
@@ -7,6 +7,7 @@ export declare class RelayStore {
|
|
|
7
7
|
readResponse(sessionId: string): Promise<string | null>;
|
|
8
8
|
writeSessionMetadata(metadata: RelaySessionMetadata): Promise<void>;
|
|
9
9
|
readSessionMetadata(relaySessionId: string): Promise<RelaySessionMetadata | null>;
|
|
10
|
+
readConfig(): Promise<RelayConfig | null>;
|
|
10
11
|
appendLog(entry: LogEntry): Promise<void>;
|
|
11
12
|
writeTask(task: TaskRecord): Promise<void>;
|
|
12
13
|
readTask(taskId: string): Promise<TaskRecord | null>;
|
|
@@ -15,4 +16,5 @@ export declare class RelayStore {
|
|
|
15
16
|
private sessionsDir;
|
|
16
17
|
private logsDir;
|
|
17
18
|
private tasksDir;
|
|
19
|
+
private configPath;
|
|
18
20
|
}
|
|
@@ -44,6 +44,19 @@ export class RelayStore {
|
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
async readConfig() {
|
|
48
|
+
const targetPath = this.configPath();
|
|
49
|
+
try {
|
|
50
|
+
const raw = await readFile(targetPath, "utf8");
|
|
51
|
+
return JSON.parse(raw);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (isMissingFileError(error)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
47
60
|
async appendLog(entry) {
|
|
48
61
|
await this.ensureLayout();
|
|
49
62
|
const date = entry.timestamp.slice(0, 10);
|
|
@@ -90,6 +103,9 @@ export class RelayStore {
|
|
|
90
103
|
tasksDir() {
|
|
91
104
|
return path.join(this.rootDir, "tasks");
|
|
92
105
|
}
|
|
106
|
+
configPath() {
|
|
107
|
+
return path.join(this.rootDir, "config.json");
|
|
108
|
+
}
|
|
93
109
|
}
|
|
94
110
|
async function writeJsonAtomic(targetPath, value) {
|
|
95
111
|
const tempPath = path.join(os.tmpdir(), `relay-${path.basename(targetPath)}-${process.pid}-${Date.now()}.tmp`);
|
|
@@ -97,4 +113,10 @@ async function writeJsonAtomic(targetPath, value) {
|
|
|
97
113
|
await rename(tempPath, targetPath);
|
|
98
114
|
await rm(tempPath, { force: true });
|
|
99
115
|
}
|
|
116
|
+
function isMissingFileError(error) {
|
|
117
|
+
return (typeof error === "object" &&
|
|
118
|
+
error !== null &&
|
|
119
|
+
"code" in error &&
|
|
120
|
+
error.code === "ENOENT");
|
|
121
|
+
}
|
|
100
122
|
//# sourceMappingURL=relay-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-store.js","sourceRoot":"","sources":["../../../src/infrastructure/store/relay-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,EAAE,EACF,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"relay-store.js","sourceRoot":"","sources":["../../../src/infrastructure/store/relay-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ const deleteTaskInputSchema = {
|
|
|
73
73
|
export function createRelayMcpServer(options) {
|
|
74
74
|
const server = new McpServer({
|
|
75
75
|
name: "agentic-relay",
|
|
76
|
-
version: "3.
|
|
76
|
+
version: "3.5.0",
|
|
77
77
|
});
|
|
78
78
|
if (options.allowSpawnAgents) {
|
|
79
79
|
server.tool("spawn_agents", "Launch one or more child agent CLI processes in parallel.", spawnAgentsInputSchema, async (args, extra) => {
|