@ai-setting/roy-agent-core 1.7.88 → 1.7.90
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/env/event-source/event-source-handlers.js +6 -6
- package/dist/env/event-source/index.js +7 -7
- package/dist/env/event-source/wecom-session-card-sender.js +2 -2
- package/dist/env/index.js +12 -11
- package/dist/env/task/backend/index.d.ts +3 -0
- package/dist/env/task/backend/index.js +155 -5
- package/dist/env/task/backend/remote-task-port.d.ts +85 -0
- package/dist/env/task/backend/roy-sidecar-task-port.d.ts +8 -0
- package/dist/env/task/backend/types.d.ts +5 -0
- package/dist/env/task/index.d.ts +1 -1
- package/dist/env/task/index.js +20 -4
- package/dist/env/task/mcp/index.js +1 -1
- package/dist/env/task/plugins/index.js +3 -3
- package/dist/env/task/plugins/lark-card-patch-notifier.js +2 -2
- package/dist/env/task/plugins/wecom-session-card-store.js +2 -2
- package/dist/env/task/storage/index.d.ts +1 -0
- package/dist/env/task/storage/index.js +23 -3
- package/dist/env/task/storage/migrations/006_add_task_owner.d.ts +24 -0
- package/dist/env/task/storage/remote-task-store.d.ts +186 -0
- package/dist/env/task/task-component.d.ts +7 -0
- package/dist/env/task/tools/index.js +1 -1
- package/dist/env/task/tools/task-types.d.ts +7 -0
- package/dist/env/task/types.d.ts +17 -0
- package/dist/env/workflow/plugins/index.js +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +17 -11
- package/dist/shared/@ai-setting/{roy-agent-core-vpcxv1ty.js → roy-agent-core-05z35shp.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-shb1qsyg.js → roy-agent-core-0n1wwndq.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-fan8g0z1.js → roy-agent-core-49qcpqwg.js} +46 -11
- package/dist/shared/@ai-setting/{roy-agent-core-gr5h1dyr.js → roy-agent-core-4b38m749.js} +4 -4
- package/dist/shared/@ai-setting/{roy-agent-core-wr1qexzq.js → roy-agent-core-5dhvfgaw.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-qwd2dq5q.js → roy-agent-core-9cen1jvg.js} +8 -4
- package/dist/shared/@ai-setting/{roy-agent-core-7kvpc0w5.js → roy-agent-core-age3qseb.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-an35dzbf.js → roy-agent-core-dvec4nn2.js} +1 -1
- package/dist/shared/@ai-setting/{roy-agent-core-ra66sf50.js → roy-agent-core-k3h8t4q1.js} +4 -3
- package/dist/shared/@ai-setting/{roy-agent-core-6k8mb7zx.js → roy-agent-core-m66ysky0.js} +53 -5
- package/dist/shared/@ai-setting/{roy-agent-core-yh68z1bg.js → roy-agent-core-m7d1t3db.js} +1 -1
- package/dist/shared/@ai-setting/roy-agent-core-zhwcje5a.js +352 -0
- package/package.json +1 -1
|
@@ -17,15 +17,15 @@ import {
|
|
|
17
17
|
resolveLarkChannelSystemPrompt,
|
|
18
18
|
timerHandler,
|
|
19
19
|
wecomCliHandler
|
|
20
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
20
|
+
} from "../../shared/@ai-setting/roy-agent-core-4b38m749.js";
|
|
21
21
|
import"../../shared/@ai-setting/roy-agent-core-vx8zc847.js";
|
|
22
22
|
import {
|
|
23
23
|
cliCommandHandler
|
|
24
24
|
} from "../../shared/@ai-setting/roy-agent-core-v0hf14bj.js";
|
|
25
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
25
|
+
import"../../shared/@ai-setting/roy-agent-core-age3qseb.js";
|
|
26
26
|
import"../../shared/@ai-setting/roy-agent-core-mf5p38yf.js";
|
|
27
27
|
import"../../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
|
|
28
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
28
|
+
import"../../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
|
|
29
29
|
import"../../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
|
|
30
30
|
import"../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
|
|
31
31
|
import"../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
|
|
@@ -34,10 +34,10 @@ import"../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
|
|
|
34
34
|
import"../../shared/@ai-setting/roy-agent-core-d6zdbgtc.js";
|
|
35
35
|
import"../../shared/@ai-setting/roy-agent-core-m46fe3x4.js";
|
|
36
36
|
import"../../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
|
|
37
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
38
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
37
|
+
import"../../shared/@ai-setting/roy-agent-core-5dhvfgaw.js";
|
|
38
|
+
import"../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
|
|
39
39
|
import"../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
40
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
40
|
+
import"../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
41
41
|
import"../../shared/@ai-setting/roy-agent-core-9c565frx.js";
|
|
42
42
|
import"../../shared/@ai-setting/roy-agent-core-h83zdsrq.js";
|
|
43
43
|
import"../../shared/@ai-setting/roy-agent-core-rm7seqwb.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import"../../shared/@ai-setting/roy-agent-core-m1fgtnrc.js";
|
|
2
2
|
import {
|
|
3
3
|
EventSourceComponent
|
|
4
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
4
|
+
} from "../../shared/@ai-setting/roy-agent-core-m7d1t3db.js";
|
|
5
5
|
import {
|
|
6
6
|
BountyIMInstance,
|
|
7
7
|
COMMAND_PREFIX,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
translateCardActionToCommand,
|
|
57
57
|
wecomCliHandler,
|
|
58
58
|
writeFallbackModelList
|
|
59
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
59
|
+
} from "../../shared/@ai-setting/roy-agent-core-4b38m749.js";
|
|
60
60
|
import {
|
|
61
61
|
BUILT_IN_EVENT_SOURCE_TYPES,
|
|
62
62
|
BUILT_IN_EVENT_SOURCE_TYPE_LIST,
|
|
@@ -73,10 +73,10 @@ import {
|
|
|
73
73
|
cliCommandHandler,
|
|
74
74
|
parseCliSessionChatId
|
|
75
75
|
} from "../../shared/@ai-setting/roy-agent-core-v0hf14bj.js";
|
|
76
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
76
|
+
import"../../shared/@ai-setting/roy-agent-core-age3qseb.js";
|
|
77
77
|
import"../../shared/@ai-setting/roy-agent-core-mf5p38yf.js";
|
|
78
78
|
import"../../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
|
|
79
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
79
|
+
import"../../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
|
|
80
80
|
import"../../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
|
|
81
81
|
import"../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
|
|
82
82
|
import {
|
|
@@ -90,10 +90,10 @@ import"../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
|
|
|
90
90
|
import"../../shared/@ai-setting/roy-agent-core-d6zdbgtc.js";
|
|
91
91
|
import"../../shared/@ai-setting/roy-agent-core-m46fe3x4.js";
|
|
92
92
|
import"../../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
|
|
93
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
94
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
93
|
+
import"../../shared/@ai-setting/roy-agent-core-5dhvfgaw.js";
|
|
94
|
+
import"../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
|
|
95
95
|
import"../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
96
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
96
|
+
import"../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
97
97
|
import"../../shared/@ai-setting/roy-agent-core-9c565frx.js";
|
|
98
98
|
import"../../shared/@ai-setting/roy-agent-core-h83zdsrq.js";
|
|
99
99
|
import"../../shared/@ai-setting/roy-agent-core-rm7seqwb.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createMemoryWecomSessionCardStore
|
|
3
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
3
|
+
} from "../../shared/@ai-setting/roy-agent-core-age3qseb.js";
|
|
4
4
|
import {
|
|
5
5
|
buildWecomSessionCard
|
|
6
6
|
} from "../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
|
|
7
7
|
import"../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
8
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
8
|
+
import"../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
9
9
|
import"../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
|
|
10
10
|
import"../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
|
|
11
11
|
import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
package/dist/env/index.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BaseEnvironment
|
|
3
|
-
} from "../shared/@ai-setting/roy-agent-core-
|
|
3
|
+
} from "../shared/@ai-setting/roy-agent-core-dvec4nn2.js";
|
|
4
4
|
import {
|
|
5
5
|
TaskComponent
|
|
6
|
-
} from "../shared/@ai-setting/roy-agent-core-
|
|
6
|
+
} from "../shared/@ai-setting/roy-agent-core-49qcpqwg.js";
|
|
7
7
|
import"../shared/@ai-setting/roy-agent-core-2akfd64z.js";
|
|
8
8
|
import"../shared/@ai-setting/roy-agent-core-jm136jzh.js";
|
|
9
9
|
import"../shared/@ai-setting/roy-agent-core-0sbmdz8d.js";
|
|
10
10
|
import"../shared/@ai-setting/roy-agent-core-fttgm52a.js";
|
|
11
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
11
|
+
import"../shared/@ai-setting/roy-agent-core-05z35shp.js";
|
|
12
|
+
import"../shared/@ai-setting/roy-agent-core-zhwcje5a.js";
|
|
12
13
|
import"../shared/@ai-setting/roy-agent-core-8gxth0eh.js";
|
|
13
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
14
|
+
import"../shared/@ai-setting/roy-agent-core-9cen1jvg.js";
|
|
14
15
|
import"../shared/@ai-setting/roy-agent-core-p5cz9m8v.js";
|
|
15
16
|
import {
|
|
16
17
|
EventSourceComponent
|
|
17
|
-
} from "../shared/@ai-setting/roy-agent-core-
|
|
18
|
+
} from "../shared/@ai-setting/roy-agent-core-m7d1t3db.js";
|
|
18
19
|
import {
|
|
19
20
|
builtInHandlers,
|
|
20
21
|
larkCliHandler
|
|
21
|
-
} from "../shared/@ai-setting/roy-agent-core-
|
|
22
|
+
} from "../shared/@ai-setting/roy-agent-core-4b38m749.js";
|
|
22
23
|
import {
|
|
23
24
|
EventSourceInitHooks,
|
|
24
25
|
getDefaultConfigForType,
|
|
@@ -27,10 +28,10 @@ import {
|
|
|
27
28
|
validateEventSourceConfig
|
|
28
29
|
} from "../shared/@ai-setting/roy-agent-core-vx8zc847.js";
|
|
29
30
|
import"../shared/@ai-setting/roy-agent-core-v0hf14bj.js";
|
|
30
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
31
|
+
import"../shared/@ai-setting/roy-agent-core-age3qseb.js";
|
|
31
32
|
import"../shared/@ai-setting/roy-agent-core-mf5p38yf.js";
|
|
32
33
|
import"../shared/@ai-setting/roy-agent-core-2stt4rp5.js";
|
|
33
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
34
|
+
import"../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
|
|
34
35
|
import"../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
|
|
35
36
|
import"../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
|
|
36
37
|
import"../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
|
|
@@ -39,10 +40,10 @@ import"../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
|
|
|
39
40
|
import"../shared/@ai-setting/roy-agent-core-d6zdbgtc.js";
|
|
40
41
|
import"../shared/@ai-setting/roy-agent-core-m46fe3x4.js";
|
|
41
42
|
import"../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
|
|
42
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
43
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
43
|
+
import"../shared/@ai-setting/roy-agent-core-5dhvfgaw.js";
|
|
44
|
+
import"../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
|
|
44
45
|
import"../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
45
|
-
import"../shared/@ai-setting/roy-agent-core-
|
|
46
|
+
import"../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
46
47
|
import {
|
|
47
48
|
WorkflowComponent
|
|
48
49
|
} from "../shared/@ai-setting/roy-agent-core-n197medr.js";
|
|
@@ -17,8 +17,11 @@
|
|
|
17
17
|
* create-operation / total / milestone 过滤 / 词汇单一来源)
|
|
18
18
|
* - `TaskPersistencePort` — 纯存取原语,任何 agent 插件实现它即可获得全部语义
|
|
19
19
|
* - `createSQLiteTaskPort` — roy 自己 `SQLiteTaskStore` 的现成 port 实现
|
|
20
|
+
* - `createRemoteTaskPort` / `createTaskPortFromConfig` — 让 backend 走常驻
|
|
21
|
+
* task-service(Task #5440:MCP 通道与 agent 工具链是两条独立接线路径)
|
|
20
22
|
*/
|
|
21
23
|
export * from "./types";
|
|
22
24
|
export { TaskStoreBackend, DELIVERABLE_OPERATION_PREFIX, formatDeliverableForOperation, mergeDeliverableIntoContext, allowedIdsByDepth, toNumericHandle, } from "./task-store-backend";
|
|
23
25
|
export { createSQLiteTaskPort } from "./sqlite-task-port";
|
|
26
|
+
export { createRemoteTaskPort, createRemoteTaskPortFromStore, createTaskPortFromConfig, type RemoteTaskPortOptions, type TaskPortFromConfig, } from "./remote-task-port";
|
|
24
27
|
export { createRoySidecarTaskPort, type RoySidecarTaskStore, type RoySidecarPortOptions, type SidecarOperation, type SidecarTask, type SidecarVocabulary, } from "./roy-sidecar-task-port";
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RemoteTaskStore
|
|
3
|
+
} from "../../../shared/@ai-setting/roy-agent-core-zhwcje5a.js";
|
|
1
4
|
import {
|
|
2
5
|
TASK_COMPLETED_STATUS_WORD,
|
|
3
6
|
TASK_DELIVERABLE_RECORDED,
|
|
4
7
|
TASK_TO_VALIDATE_STATUS_WORD
|
|
5
8
|
} from "../../../shared/@ai-setting/roy-agent-core-4rtg69cn.js";
|
|
9
|
+
import {
|
|
10
|
+
SQLiteTaskStore,
|
|
11
|
+
init_sqlite_task_store
|
|
12
|
+
} from "../../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
13
|
+
import"../../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
|
|
14
|
+
import {
|
|
15
|
+
createLogger,
|
|
16
|
+
init_logger
|
|
17
|
+
} from "../../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
|
|
18
|
+
import"../../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
|
6
19
|
import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
|
|
7
20
|
// src/env/task/backend/task-store-backend.ts
|
|
8
21
|
var DELIVERABLE_OPERATION_PREFIX = "Deliverable: ";
|
|
@@ -70,7 +83,8 @@ class TaskStoreBackend {
|
|
|
70
83
|
tags: input.tags,
|
|
71
84
|
project_path: input.project_path,
|
|
72
85
|
context: input.context,
|
|
73
|
-
sessionId
|
|
86
|
+
sessionId,
|
|
87
|
+
...input.owner !== undefined && input.owner !== null ? { owner: input.owner } : {}
|
|
74
88
|
});
|
|
75
89
|
await this.createOperation({
|
|
76
90
|
taskId: created.id,
|
|
@@ -127,7 +141,8 @@ class TaskStoreBackend {
|
|
|
127
141
|
tags: input.tags,
|
|
128
142
|
project_path: input.project_path,
|
|
129
143
|
context: input.context,
|
|
130
|
-
...parentNum !== undefined ? { parent_task_id: parentNum } : {}
|
|
144
|
+
...parentNum !== undefined ? { parent_task_id: parentNum } : {},
|
|
145
|
+
...input.owner !== undefined ? { owner: input.owner } : {}
|
|
131
146
|
});
|
|
132
147
|
return updated ? this.toTask(updated) : null;
|
|
133
148
|
}
|
|
@@ -425,7 +440,8 @@ function createSQLiteTaskPort(store) {
|
|
|
425
440
|
...input.tags !== undefined ? { tags: input.tags } : {},
|
|
426
441
|
sessionId: input.sessionId ?? "unknown",
|
|
427
442
|
project_path: input.project_path,
|
|
428
|
-
context: input.context
|
|
443
|
+
context: input.context,
|
|
444
|
+
...input.owner !== undefined ? { owner: input.owner } : {}
|
|
429
445
|
});
|
|
430
446
|
return { ...task, nativeId: String(task.id) };
|
|
431
447
|
},
|
|
@@ -505,6 +521,135 @@ function createSQLiteTaskPort(store) {
|
|
|
505
521
|
}
|
|
506
522
|
};
|
|
507
523
|
}
|
|
524
|
+
// src/env/task/backend/remote-task-port.ts
|
|
525
|
+
init_sqlite_task_store();
|
|
526
|
+
init_logger();
|
|
527
|
+
var SCAN_ALL2 = 1e6;
|
|
528
|
+
var defaultLog = createLogger("task-remote-port");
|
|
529
|
+
function createRemoteTaskPortFromStore(store) {
|
|
530
|
+
return {
|
|
531
|
+
async createTask(input) {
|
|
532
|
+
const task = await store.createTask({
|
|
533
|
+
title: input.title,
|
|
534
|
+
description: input.description,
|
|
535
|
+
...input.priority !== undefined ? { priority: input.priority } : {},
|
|
536
|
+
...input.type !== undefined ? { type: input.type } : {},
|
|
537
|
+
...input.parent_task_id !== undefined ? { parent_task_id: input.parent_task_id } : {},
|
|
538
|
+
...input.goals_and_expected_deliverables !== undefined ? { goals_and_expected_deliverables: input.goals_and_expected_deliverables } : {},
|
|
539
|
+
...input.due_date !== undefined ? { due_date: input.due_date } : {},
|
|
540
|
+
...input.tags !== undefined ? { tags: input.tags } : {},
|
|
541
|
+
sessionId: input.sessionId ?? "unknown",
|
|
542
|
+
project_path: input.project_path,
|
|
543
|
+
context: input.context,
|
|
544
|
+
...input.owner !== undefined ? { owner: input.owner } : {}
|
|
545
|
+
});
|
|
546
|
+
return { ...task, nativeId: String(task.id) };
|
|
547
|
+
},
|
|
548
|
+
async getTask(nativeId) {
|
|
549
|
+
const num = Number(nativeId);
|
|
550
|
+
if (!Number.isFinite(num))
|
|
551
|
+
return null;
|
|
552
|
+
const task = await store.getTask(num);
|
|
553
|
+
return task ? { ...task, nativeId: String(task.id) } : null;
|
|
554
|
+
},
|
|
555
|
+
async getTaskByNum(num) {
|
|
556
|
+
const task = await store.getTask(num);
|
|
557
|
+
return task ? { ...task, nativeId: String(task.id) } : null;
|
|
558
|
+
},
|
|
559
|
+
async listTasks(options) {
|
|
560
|
+
const res = await store.listTasks({
|
|
561
|
+
limit: options?.limit ?? 20,
|
|
562
|
+
offset: options?.offset ?? 0,
|
|
563
|
+
...options?.includeArchived ? { include_archived: true } : {}
|
|
564
|
+
});
|
|
565
|
+
return {
|
|
566
|
+
tasks: res.tasks.map((t) => ({ ...t, nativeId: String(t.id) })),
|
|
567
|
+
total: res.total
|
|
568
|
+
};
|
|
569
|
+
},
|
|
570
|
+
async updateTask(nativeId, patch) {
|
|
571
|
+
const num = Number(nativeId);
|
|
572
|
+
if (!Number.isFinite(num))
|
|
573
|
+
return null;
|
|
574
|
+
const task = await store.updateTask(num, patch);
|
|
575
|
+
return task ? { ...task, nativeId: String(task.id) } : null;
|
|
576
|
+
},
|
|
577
|
+
async deleteTask(nativeId) {
|
|
578
|
+
const num = Number(nativeId);
|
|
579
|
+
if (!Number.isFinite(num))
|
|
580
|
+
return false;
|
|
581
|
+
return await store.deleteTask(num);
|
|
582
|
+
},
|
|
583
|
+
async createOperation(input) {
|
|
584
|
+
const op = await store.createOperation({
|
|
585
|
+
taskId: input.taskId,
|
|
586
|
+
sessionId: input.sessionId,
|
|
587
|
+
milestoneType: input.milestoneType,
|
|
588
|
+
milestoneTitle: input.milestoneTitle,
|
|
589
|
+
milestoneDescription: input.milestoneDescription,
|
|
590
|
+
processDescription: input.processDescription,
|
|
591
|
+
...input.mdPath ? { mdPath: input.mdPath } : {}
|
|
592
|
+
});
|
|
593
|
+
return { ...op, nativeId: String(op.id) };
|
|
594
|
+
},
|
|
595
|
+
async listOperations(options) {
|
|
596
|
+
const num = Number(options?.taskNativeId);
|
|
597
|
+
if (!Number.isFinite(num))
|
|
598
|
+
return { operations: [], total: 0 };
|
|
599
|
+
const all = await store.listOperations({ taskId: num, limit: SCAN_ALL2, offset: 0 });
|
|
600
|
+
const offset = options?.offset ?? 0;
|
|
601
|
+
const limit = options?.limit ?? all.length;
|
|
602
|
+
return {
|
|
603
|
+
operations: all.slice(offset, offset + limit).map((o) => ({ ...o, nativeId: String(o.id) })),
|
|
604
|
+
total: all.length
|
|
605
|
+
};
|
|
606
|
+
},
|
|
607
|
+
async getOperationByNum(num) {
|
|
608
|
+
const op = await store.getOperation(num);
|
|
609
|
+
return op ? { ...op, nativeId: String(op.id) } : null;
|
|
610
|
+
},
|
|
611
|
+
async updateOperationByNum(num, patch) {
|
|
612
|
+
const op = await store.updateOperation(num, {
|
|
613
|
+
...patch.milestoneTitle !== undefined ? { milestoneTitle: patch.milestoneTitle } : {},
|
|
614
|
+
...patch.milestoneDescription !== undefined ? { milestoneDescription: patch.milestoneDescription } : {},
|
|
615
|
+
...patch.processDescription !== undefined ? { processDescription: patch.processDescription } : {}
|
|
616
|
+
});
|
|
617
|
+
return op ? { ...op, nativeId: String(op.id) } : null;
|
|
618
|
+
},
|
|
619
|
+
async deleteOperationByNum(num) {
|
|
620
|
+
return await store.deleteOperation(num);
|
|
621
|
+
}
|
|
622
|
+
};
|
|
623
|
+
}
|
|
624
|
+
function createRemoteTaskPort(options) {
|
|
625
|
+
if (!options?.endpoint && !options.store) {
|
|
626
|
+
throw new Error("[createRemoteTaskPort] endpoint is required (task.storage.endpoint). " + "Point it at the running roy-task-service, e.g. http://127.0.0.1:7820.");
|
|
627
|
+
}
|
|
628
|
+
const store = options.store ?? new RemoteTaskStore({
|
|
629
|
+
endpoint: options.endpoint,
|
|
630
|
+
authToken: options.authToken,
|
|
631
|
+
...options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {},
|
|
632
|
+
...options.maxRetries !== undefined ? { maxRetries: options.maxRetries } : {}
|
|
633
|
+
});
|
|
634
|
+
return createRemoteTaskPortFromStore(store);
|
|
635
|
+
}
|
|
636
|
+
async function createTaskPortFromConfig(config, defaults = {}) {
|
|
637
|
+
const type = config.get("task.storage.type") ?? "sqlite";
|
|
638
|
+
if (type === "remote") {
|
|
639
|
+
const endpoint = config.get("task.storage.endpoint");
|
|
640
|
+
const authToken = config.get("task.storage.authToken");
|
|
641
|
+
if (!endpoint) {
|
|
642
|
+
throw new Error("[createTaskPortFromConfig] task.storage.type=remote requires task.storage.endpoint " + "(e.g. http://127.0.0.1:7820). No local fallback is performed by design.");
|
|
643
|
+
}
|
|
644
|
+
const store2 = new RemoteTaskStore({ endpoint, authToken });
|
|
645
|
+
return { port: createRemoteTaskPortFromStore(store2), kind: "remote", store: store2 };
|
|
646
|
+
}
|
|
647
|
+
if (type !== "sqlite") {
|
|
648
|
+
defaultLog.warn?.(`[createTaskPortFromConfig] Unknown task.storage.type="${String(type)}", ` + `falling back to default SQLite storage. Supported: "sqlite" | "remote".`);
|
|
649
|
+
}
|
|
650
|
+
const store = new SQLiteTaskStore(defaults.dbPath);
|
|
651
|
+
return { port: createSQLiteTaskPort(store), kind: "sqlite", store };
|
|
652
|
+
}
|
|
508
653
|
// src/env/task/backend/roy-sidecar-task-port.ts
|
|
509
654
|
var DEFAULT_SCAN = 1e6;
|
|
510
655
|
function toSidecarPatch(patch) {
|
|
@@ -548,7 +693,8 @@ function toStoredTask(record, vocabulary, parentNum) {
|
|
|
548
693
|
...side.due_date ? { due_date: side.due_date } : {},
|
|
549
694
|
tags: vocabulary.toRoyTags(record.tags),
|
|
550
695
|
project_path: side.project_path ?? "unknown",
|
|
551
|
-
context: side.context ?? "{}"
|
|
696
|
+
context: side.context ?? "{}",
|
|
697
|
+
...record.owner !== undefined ? { owner: record.owner } : {}
|
|
552
698
|
};
|
|
553
699
|
}
|
|
554
700
|
function toStoredOperation(record) {
|
|
@@ -611,7 +757,7 @@ function createRoySidecarTaskPort(store, vocabulary, options = {}) {
|
|
|
611
757
|
title: input.title,
|
|
612
758
|
description: input.description,
|
|
613
759
|
priority: vocabulary.toStorePriority(input.priority),
|
|
614
|
-
owner: agent,
|
|
760
|
+
owner: input.owner ?? agent,
|
|
615
761
|
tags: vocabulary.toStoreTags(input.tags),
|
|
616
762
|
parent_id: parentId,
|
|
617
763
|
session_id: input.sessionId ?? "unknown",
|
|
@@ -652,6 +798,7 @@ function createRoySidecarTaskPort(store, vocabulary, options = {}) {
|
|
|
652
798
|
...patch.status !== undefined ? { status: vocabulary.toStoreStatus(patch.status) } : {},
|
|
653
799
|
...patch.priority !== undefined ? { priority: vocabulary.toStorePriority(patch.priority) } : {},
|
|
654
800
|
...patch.tags !== undefined ? { tags: vocabulary.toStoreTags(patch.tags) } : {},
|
|
801
|
+
...patch.owner !== undefined ? { owner: patch.owner } : {},
|
|
655
802
|
...Object.keys(sidePatch).length > 0 ? { roy: sidePatch } : {}
|
|
656
803
|
});
|
|
657
804
|
if (!updated)
|
|
@@ -738,8 +885,11 @@ export {
|
|
|
738
885
|
toNumericHandle,
|
|
739
886
|
mergeDeliverableIntoContext,
|
|
740
887
|
formatDeliverableForOperation,
|
|
888
|
+
createTaskPortFromConfig,
|
|
741
889
|
createSQLiteTaskPort,
|
|
742
890
|
createRoySidecarTaskPort,
|
|
891
|
+
createRemoteTaskPortFromStore,
|
|
892
|
+
createRemoteTaskPort,
|
|
743
893
|
allowedIdsByDepth,
|
|
744
894
|
TaskStoreBackend,
|
|
745
895
|
DELIVERABLE_OPERATION_PREFIX
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Remote Task Port — 让 MCP / 插件侧的 `TaskStoreBackend` 走 task-service
|
|
3
|
+
*
|
|
4
|
+
* Task #5440(方案 v3 §2.2 / M4)。
|
|
5
|
+
*
|
|
6
|
+
* ## 为什么需要这一层
|
|
7
|
+
*
|
|
8
|
+
* `TaskComponent`(agent 自己的工具链)与 MCP(`TaskStoreBackend`)是**两条
|
|
9
|
+
* 独立**的存储接线路径:
|
|
10
|
+
*
|
|
11
|
+
* ```
|
|
12
|
+
* agent 工具 (task_create …) ──► TaskComponent ──► initStore 分支 ──► store
|
|
13
|
+
* MCP 工具 (task_create …) ──► TaskStoreBackend ──► TaskPersistencePort ──► store
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* `TaskStoreBackend` 的构造参数是 `TaskPersistencePort`(纯存取原语),**不是**
|
|
17
|
+
* `TaskStore`。所以 remote 覆盖必须落在 port 工厂这一层,而不是靠 initStore
|
|
18
|
+
* 分支(两条路径互不经过)。
|
|
19
|
+
*
|
|
20
|
+
* ## 语义边界(重要)
|
|
21
|
+
*
|
|
22
|
+
* 这里**只做形状翻译**,不做任何 roy 语义:
|
|
23
|
+
* - `TaskStore` 的数字 id ↔ port 的 `nativeId`(十进制字符串)
|
|
24
|
+
* - port 的「纯分页 listTasks」← `TaskStore.listTasks`(不传语义过滤)
|
|
25
|
+
* - `total` 由 port 诚实计算(`listOperations` 不返回总数)
|
|
26
|
+
*
|
|
27
|
+
* BFS / depth / deliverable / create-operation 全部仍在 `TaskStoreBackend`,
|
|
28
|
+
* 保证 remote 与本地跑的是**同一套**语义。
|
|
29
|
+
*/
|
|
30
|
+
import type { TaskStore } from "../storage/sqlite-task-store";
|
|
31
|
+
import type { TaskPersistencePort } from "./types";
|
|
32
|
+
/**
|
|
33
|
+
* 把任意 `TaskStore`(本地或远端)接成 `TaskPersistencePort`。
|
|
34
|
+
*
|
|
35
|
+
* 与 {@link createSQLiteTaskPort} 的区别:那个是「本地专用」的现成适配
|
|
36
|
+
* (`store.listTasks` 自带 include_archived 透传等本地细节),本函数面向
|
|
37
|
+
* **remote** 场景,且刻意保持最小契约(remote 的 HTTP 层语义与本地完全
|
|
38
|
+
* 1:1,不需要本地特化)。
|
|
39
|
+
*/
|
|
40
|
+
export declare function createRemoteTaskPortFromStore(store: TaskStore): TaskPersistencePort;
|
|
41
|
+
export interface RemoteTaskPortOptions {
|
|
42
|
+
/** service 地址,如 `http://127.0.0.1:7820` */
|
|
43
|
+
endpoint: string;
|
|
44
|
+
/** Bearer token(与服务端 TASK_AUTH_TOKEN 一致) */
|
|
45
|
+
authToken?: string;
|
|
46
|
+
/** 单请求超时(毫秒) */
|
|
47
|
+
timeoutMs?: number;
|
|
48
|
+
/** 最大重试次数 */
|
|
49
|
+
maxRetries?: number;
|
|
50
|
+
/** 注入已有 store(测试/复用连接配置) */
|
|
51
|
+
store?: TaskStore;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 建一个走 task-service 的 port。
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* const backend = new TaskStoreBackend(createRemoteTaskPort({ endpoint, authToken }));
|
|
58
|
+
* const server = createTaskMcpServer(backend);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function createRemoteTaskPort(options: RemoteTaskPortOptions): TaskPersistencePort;
|
|
62
|
+
/** `createTaskPortFromConfig` 的返回:port + 实际选中的引擎类型(便于日志/诊断)。 */
|
|
63
|
+
export interface TaskPortFromConfig {
|
|
64
|
+
port: TaskPersistencePort;
|
|
65
|
+
kind: "sqlite" | "remote";
|
|
66
|
+
/** 选中引擎背后的 store 实例(宿主需要 close 时用)。 */
|
|
67
|
+
store: TaskStore;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 按 `task.storage.*` 配置构造 port —— MCP / 插件宿主接线用。
|
|
71
|
+
*
|
|
72
|
+
* - `type=sqlite`(默认)→ 本地 `SQLiteTaskStore` + {@link createSQLiteTaskPort}
|
|
73
|
+
* - `type=remote` → `RemoteTaskStore` + {@link createRemoteTaskPortFromStore}
|
|
74
|
+
*
|
|
75
|
+
* ⚠️ `type=remote` 缺 `endpoint` 时**明确抛错**(与 `TaskComponent.initStore`
|
|
76
|
+
* 同语义:不猜默认值、不静默退回本地库)。
|
|
77
|
+
*
|
|
78
|
+
* @param config 具备 `get(key)` 的配置对象(通常是 `ConfigComponent`)
|
|
79
|
+
* @param defaults `sqlite` 分支的 dbPath 等本地选项
|
|
80
|
+
*/
|
|
81
|
+
export declare function createTaskPortFromConfig(config: {
|
|
82
|
+
get(key: string): unknown;
|
|
83
|
+
}, defaults?: {
|
|
84
|
+
dbPath?: string;
|
|
85
|
+
}): Promise<TaskPortFromConfig>;
|
|
@@ -37,6 +37,12 @@ export interface SidecarTask {
|
|
|
37
37
|
tags?: string;
|
|
38
38
|
parent_id: string | null;
|
|
39
39
|
session_id?: string | null;
|
|
40
|
+
/**
|
|
41
|
+
* 负责人(Task #5440)。业务 store 自己的 owner 列(string);
|
|
42
|
+
* create 时由 port 写入(显式 owner 优先,缺省回落 `agent`),
|
|
43
|
+
* update 时透传(undefined = 不改;null = 清空)。
|
|
44
|
+
*/
|
|
45
|
+
owner?: string | null;
|
|
40
46
|
roy?: Record<string, unknown>;
|
|
41
47
|
created_at: string;
|
|
42
48
|
updated_at: string;
|
|
@@ -67,6 +73,8 @@ export interface RoySidecarTaskStore {
|
|
|
67
73
|
status?: string;
|
|
68
74
|
priority?: number;
|
|
69
75
|
tags?: string;
|
|
76
|
+
/** 负责人(Task #5440):undefined = 不改;null = 清空;字符串 = 改派。 */
|
|
77
|
+
owner?: string | null;
|
|
70
78
|
roy?: Record<string, unknown>;
|
|
71
79
|
}): Promise<SidecarTask | null>;
|
|
72
80
|
getTask(id: string): Promise<SidecarTask | null>;
|
|
@@ -225,6 +225,11 @@ export interface PortUpdateTaskInput {
|
|
|
225
225
|
context?: string;
|
|
226
226
|
/** `null` = 提升为根任务。 */
|
|
227
227
|
parent_task_id?: number | null;
|
|
228
|
+
/**
|
|
229
|
+
* 负责人(Task #5440)。`undefined` = 不改;`null` = 清空;字符串 = 改派。
|
|
230
|
+
* 与 `PortCreateTaskInput.owner` 同语义,roy 自己的 port 直接落到 owner 列。
|
|
231
|
+
*/
|
|
232
|
+
owner?: string | null;
|
|
228
233
|
}
|
|
229
234
|
/** port 的建 operation 入参。 */
|
|
230
235
|
export interface PortCreateOperationInput {
|
package/dist/env/task/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { TaskComponent, type TaskComponentOptions } from "./task-component";
|
|
5
5
|
export * from "./types";
|
|
6
|
-
export { SQLiteTaskStore, getDefaultTaskDbPath, type TaskStore } from "./storage";
|
|
6
|
+
export { SQLiteTaskStore, getDefaultTaskDbPath, type TaskStore, RemoteTaskStore, createRemoteTaskStore, RemoteTaskStoreError, RemoteAuthError, RemoteBatchBusyError, RemoteIdempotencyConflictError, RemoteProtocolError, type RemoteTaskStoreOptions, } from "./storage";
|
|
7
7
|
export { TASK_COMPLETED_STATUS_WORD, TASK_CANCELLED_STATUS_WORD, TASK_ARCHIVED_STATUS_WORD, TASK_DELIVERABLE_RECORDED, } from "./tools/completion-copy";
|
|
8
8
|
export * from "./events";
|
package/dist/env/task/index.js
CHANGED
|
@@ -5,16 +5,25 @@ import {
|
|
|
5
5
|
TaskPriorityEnum,
|
|
6
6
|
TaskStatusEnum,
|
|
7
7
|
TaskTypeEnum
|
|
8
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
8
|
+
} from "../../shared/@ai-setting/roy-agent-core-49qcpqwg.js";
|
|
9
9
|
import"../../shared/@ai-setting/roy-agent-core-2akfd64z.js";
|
|
10
10
|
import"../../shared/@ai-setting/roy-agent-core-jm136jzh.js";
|
|
11
11
|
import"../../shared/@ai-setting/roy-agent-core-0sbmdz8d.js";
|
|
12
12
|
import"../../shared/@ai-setting/roy-agent-core-fttgm52a.js";
|
|
13
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
13
|
+
import"../../shared/@ai-setting/roy-agent-core-05z35shp.js";
|
|
14
|
+
import {
|
|
15
|
+
RemoteAuthError,
|
|
16
|
+
RemoteBatchBusyError,
|
|
17
|
+
RemoteIdempotencyConflictError,
|
|
18
|
+
RemoteProtocolError,
|
|
19
|
+
RemoteTaskStore,
|
|
20
|
+
RemoteTaskStoreError,
|
|
21
|
+
createRemoteTaskStore
|
|
22
|
+
} from "../../shared/@ai-setting/roy-agent-core-zhwcje5a.js";
|
|
14
23
|
import {
|
|
15
24
|
TaskEntityEventTypes
|
|
16
25
|
} from "../../shared/@ai-setting/roy-agent-core-8gxth0eh.js";
|
|
17
|
-
import"../../shared/@ai-setting/roy-agent-core-
|
|
26
|
+
import"../../shared/@ai-setting/roy-agent-core-9cen1jvg.js";
|
|
18
27
|
import"../../shared/@ai-setting/roy-agent-core-p5cz9m8v.js";
|
|
19
28
|
import"../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
|
|
20
29
|
import"../../shared/@ai-setting/roy-agent-core-y7fqtzk2.js";
|
|
@@ -30,7 +39,7 @@ import {
|
|
|
30
39
|
import {
|
|
31
40
|
SQLiteTaskStore,
|
|
32
41
|
getDefaultTaskDbPath
|
|
33
|
-
} from "../../shared/@ai-setting/roy-agent-core-
|
|
42
|
+
} from "../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
34
43
|
import"../../shared/@ai-setting/roy-agent-core-v1n0106v.js";
|
|
35
44
|
import"../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
|
|
36
45
|
import"../../shared/@ai-setting/roy-agent-core-c1v263jn.js";
|
|
@@ -46,6 +55,7 @@ import"../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
|
|
46
55
|
import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
|
|
47
56
|
export {
|
|
48
57
|
getDefaultTaskDbPath,
|
|
58
|
+
createRemoteTaskStore,
|
|
49
59
|
TaskTypeEnum,
|
|
50
60
|
TaskStatusEnum,
|
|
51
61
|
TaskPriorityEnum,
|
|
@@ -57,5 +67,11 @@ export {
|
|
|
57
67
|
TASK_CANCELLED_STATUS_WORD,
|
|
58
68
|
TASK_ARCHIVED_STATUS_WORD,
|
|
59
69
|
SQLiteTaskStore,
|
|
70
|
+
RemoteTaskStoreError,
|
|
71
|
+
RemoteTaskStore,
|
|
72
|
+
RemoteProtocolError,
|
|
73
|
+
RemoteIdempotencyConflictError,
|
|
74
|
+
RemoteBatchBusyError,
|
|
75
|
+
RemoteAuthError,
|
|
60
76
|
ActionTypeEnum
|
|
61
77
|
};
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
parseExtractorOutput,
|
|
31
31
|
registerLayaCompletionTaskHook,
|
|
32
32
|
renderCompletionState
|
|
33
|
-
} from "../../../shared/@ai-setting/roy-agent-core-
|
|
33
|
+
} from "../../../shared/@ai-setting/roy-agent-core-k3h8t4q1.js";
|
|
34
34
|
import"../../../shared/@ai-setting/roy-agent-core-h1e1fm9b.js";
|
|
35
35
|
import"../../../shared/@ai-setting/roy-agent-core-c4ec7k0p.js";
|
|
36
36
|
import"../../../shared/@ai-setting/roy-agent-core-4t3yskp8.js";
|
|
@@ -66,9 +66,9 @@ import {
|
|
|
66
66
|
renderWorkflowInfoLines,
|
|
67
67
|
resolveTaskTitleForDisplay,
|
|
68
68
|
sanitizeInlineText
|
|
69
|
-
} from "../../../shared/@ai-setting/roy-agent-core-
|
|
69
|
+
} from "../../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
|
|
70
70
|
import"../../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
71
|
-
import"../../../shared/@ai-setting/roy-agent-core-
|
|
71
|
+
import"../../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
72
72
|
import"../../../shared/@ai-setting/roy-agent-core-rm7seqwb.js";
|
|
73
73
|
import"../../../shared/@ai-setting/roy-agent-core-e08bvpaq.js";
|
|
74
74
|
import"../../../shared/@ai-setting/roy-agent-core-er070zjq.js";
|
|
@@ -26,9 +26,9 @@ import {
|
|
|
26
26
|
resolveTaskTitleForDisplay,
|
|
27
27
|
sanitizeInlineText,
|
|
28
28
|
truncateHeadTitle
|
|
29
|
-
} from "../../../shared/@ai-setting/roy-agent-core-
|
|
29
|
+
} from "../../../shared/@ai-setting/roy-agent-core-0n1wwndq.js";
|
|
30
30
|
import"../../../shared/@ai-setting/roy-agent-core-418zc9ha.js";
|
|
31
|
-
import"../../../shared/@ai-setting/roy-agent-core-
|
|
31
|
+
import"../../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
32
32
|
import"../../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
|
|
33
33
|
import"../../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
|
|
34
34
|
import"../../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
createWecomSessionCardStore,
|
|
7
7
|
getDefaultWecomSessionCardDbPath,
|
|
8
8
|
getSharedWecomSessionCardStore
|
|
9
|
-
} from "../../../shared/@ai-setting/roy-agent-core-
|
|
10
|
-
import"../../../shared/@ai-setting/roy-agent-core-
|
|
9
|
+
} from "../../../shared/@ai-setting/roy-agent-core-age3qseb.js";
|
|
10
|
+
import"../../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
11
11
|
import"../../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
|
|
12
12
|
import"../../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
|
|
13
13
|
import"../../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
|
@@ -3,3 +3,4 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { SQLiteTaskStore, type TaskStore } from "./sqlite-task-store";
|
|
5
5
|
export { getDefaultTaskDbPath, getDefaultDataDir } from "./sqlite-task-store";
|
|
6
|
+
export { RemoteTaskStore, createRemoteTaskStore, RemoteTaskStoreError, RemoteAuthError, RemoteBatchBusyError, RemoteIdempotencyConflictError, RemoteProtocolError, REMOTE_PROTOCOL_MAJOR, REMOTE_TASK_STORE_METHODS, type RemoteTaskStoreOptions, type RemoteLogger, type RemoteTaskStoreStats, } from "./remote-task-store";
|