@ai-setting/roy-agent-core 1.7.88 → 1.7.89
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 +151 -3
- package/dist/env/task/backend/remote-task-port.d.ts +85 -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) {
|
|
@@ -738,8 +883,11 @@ export {
|
|
|
738
883
|
toNumericHandle,
|
|
739
884
|
mergeDeliverableIntoContext,
|
|
740
885
|
formatDeliverableForOperation,
|
|
886
|
+
createTaskPortFromConfig,
|
|
741
887
|
createSQLiteTaskPort,
|
|
742
888
|
createRoySidecarTaskPort,
|
|
889
|
+
createRemoteTaskPortFromStore,
|
|
890
|
+
createRemoteTaskPort,
|
|
743
891
|
allowedIdsByDepth,
|
|
744
892
|
TaskStoreBackend,
|
|
745
893
|
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>;
|
|
@@ -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";
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
-
import"../../../shared/@ai-setting/roy-agent-core-
|
|
1
|
+
import"../../../shared/@ai-setting/roy-agent-core-05z35shp.js";
|
|
2
|
+
import {
|
|
3
|
+
REMOTE_PROTOCOL_MAJOR,
|
|
4
|
+
REMOTE_TASK_STORE_METHODS,
|
|
5
|
+
RemoteAuthError,
|
|
6
|
+
RemoteBatchBusyError,
|
|
7
|
+
RemoteIdempotencyConflictError,
|
|
8
|
+
RemoteProtocolError,
|
|
9
|
+
RemoteTaskStore,
|
|
10
|
+
RemoteTaskStoreError,
|
|
11
|
+
createRemoteTaskStore
|
|
12
|
+
} from "../../../shared/@ai-setting/roy-agent-core-zhwcje5a.js";
|
|
2
13
|
import {
|
|
3
14
|
SQLiteTaskStore,
|
|
4
15
|
getDefaultDataDir,
|
|
5
16
|
getDefaultTaskDbPath
|
|
6
|
-
} from "../../../shared/@ai-setting/roy-agent-core-
|
|
17
|
+
} from "../../../shared/@ai-setting/roy-agent-core-m66ysky0.js";
|
|
7
18
|
import"../../../shared/@ai-setting/roy-agent-core-5s2t8z00.js";
|
|
8
19
|
import"../../../shared/@ai-setting/roy-agent-core-7f7t9wwp.js";
|
|
9
20
|
import"../../../shared/@ai-setting/roy-agent-core-85xyctnb.js";
|
|
@@ -11,5 +22,14 @@ import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
|
|
|
11
22
|
export {
|
|
12
23
|
getDefaultTaskDbPath,
|
|
13
24
|
getDefaultDataDir,
|
|
14
|
-
|
|
25
|
+
createRemoteTaskStore,
|
|
26
|
+
SQLiteTaskStore,
|
|
27
|
+
RemoteTaskStoreError,
|
|
28
|
+
RemoteTaskStore,
|
|
29
|
+
RemoteProtocolError,
|
|
30
|
+
RemoteIdempotencyConflictError,
|
|
31
|
+
RemoteBatchBusyError,
|
|
32
|
+
RemoteAuthError,
|
|
33
|
+
REMOTE_TASK_STORE_METHODS,
|
|
34
|
+
REMOTE_PROTOCOL_MAJOR
|
|
15
35
|
};
|