@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.
Files changed (38) hide show
  1. package/dist/env/event-source/event-source-handlers.js +6 -6
  2. package/dist/env/event-source/index.js +7 -7
  3. package/dist/env/event-source/wecom-session-card-sender.js +2 -2
  4. package/dist/env/index.js +12 -11
  5. package/dist/env/task/backend/index.d.ts +3 -0
  6. package/dist/env/task/backend/index.js +151 -3
  7. package/dist/env/task/backend/remote-task-port.d.ts +85 -0
  8. package/dist/env/task/backend/types.d.ts +5 -0
  9. package/dist/env/task/index.d.ts +1 -1
  10. package/dist/env/task/index.js +20 -4
  11. package/dist/env/task/mcp/index.js +1 -1
  12. package/dist/env/task/plugins/index.js +3 -3
  13. package/dist/env/task/plugins/lark-card-patch-notifier.js +2 -2
  14. package/dist/env/task/plugins/wecom-session-card-store.js +2 -2
  15. package/dist/env/task/storage/index.d.ts +1 -0
  16. package/dist/env/task/storage/index.js +23 -3
  17. package/dist/env/task/storage/migrations/006_add_task_owner.d.ts +24 -0
  18. package/dist/env/task/storage/remote-task-store.d.ts +186 -0
  19. package/dist/env/task/task-component.d.ts +7 -0
  20. package/dist/env/task/tools/index.js +1 -1
  21. package/dist/env/task/tools/task-types.d.ts +7 -0
  22. package/dist/env/task/types.d.ts +17 -0
  23. package/dist/env/workflow/plugins/index.js +3 -3
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +17 -11
  26. package/dist/shared/@ai-setting/{roy-agent-core-vpcxv1ty.js → roy-agent-core-05z35shp.js} +1 -1
  27. package/dist/shared/@ai-setting/{roy-agent-core-shb1qsyg.js → roy-agent-core-0n1wwndq.js} +1 -1
  28. package/dist/shared/@ai-setting/{roy-agent-core-fan8g0z1.js → roy-agent-core-49qcpqwg.js} +46 -11
  29. package/dist/shared/@ai-setting/{roy-agent-core-gr5h1dyr.js → roy-agent-core-4b38m749.js} +4 -4
  30. package/dist/shared/@ai-setting/{roy-agent-core-wr1qexzq.js → roy-agent-core-5dhvfgaw.js} +1 -1
  31. package/dist/shared/@ai-setting/{roy-agent-core-qwd2dq5q.js → roy-agent-core-9cen1jvg.js} +8 -4
  32. package/dist/shared/@ai-setting/{roy-agent-core-7kvpc0w5.js → roy-agent-core-age3qseb.js} +1 -1
  33. package/dist/shared/@ai-setting/{roy-agent-core-an35dzbf.js → roy-agent-core-dvec4nn2.js} +1 -1
  34. package/dist/shared/@ai-setting/{roy-agent-core-ra66sf50.js → roy-agent-core-k3h8t4q1.js} +4 -3
  35. package/dist/shared/@ai-setting/{roy-agent-core-6k8mb7zx.js → roy-agent-core-m66ysky0.js} +53 -5
  36. package/dist/shared/@ai-setting/{roy-agent-core-yh68z1bg.js → roy-agent-core-m7d1t3db.js} +1 -1
  37. package/dist/shared/@ai-setting/roy-agent-core-zhwcje5a.js +352 -0
  38. 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-gr5h1dyr.js";
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-7kvpc0w5.js";
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-ra66sf50.js";
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-wr1qexzq.js";
38
- import"../../shared/@ai-setting/roy-agent-core-shb1qsyg.js";
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-6k8mb7zx.js";
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-yh68z1bg.js";
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-gr5h1dyr.js";
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-7kvpc0w5.js";
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-ra66sf50.js";
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-wr1qexzq.js";
94
- import"../../shared/@ai-setting/roy-agent-core-shb1qsyg.js";
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-6k8mb7zx.js";
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-7kvpc0w5.js";
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-6k8mb7zx.js";
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-an35dzbf.js";
3
+ } from "../shared/@ai-setting/roy-agent-core-dvec4nn2.js";
4
4
  import {
5
5
  TaskComponent
6
- } from "../shared/@ai-setting/roy-agent-core-fan8g0z1.js";
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-vpcxv1ty.js";
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-qwd2dq5q.js";
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-yh68z1bg.js";
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-gr5h1dyr.js";
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-7kvpc0w5.js";
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-ra66sf50.js";
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-wr1qexzq.js";
43
- import"../shared/@ai-setting/roy-agent-core-shb1qsyg.js";
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-6k8mb7zx.js";
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 {
@@ -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";
@@ -5,16 +5,25 @@ import {
5
5
  TaskPriorityEnum,
6
6
  TaskStatusEnum,
7
7
  TaskTypeEnum
8
- } from "../../shared/@ai-setting/roy-agent-core-fan8g0z1.js";
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-vpcxv1ty.js";
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-qwd2dq5q.js";
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-6k8mb7zx.js";
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
  };
@@ -7,7 +7,7 @@ import {
7
7
  searchTasksTool,
8
8
  treeTasksTool,
9
9
  updateTaskTool
10
- } from "../../../shared/@ai-setting/roy-agent-core-qwd2dq5q.js";
10
+ } from "../../../shared/@ai-setting/roy-agent-core-9cen1jvg.js";
11
11
  import {
12
12
  createOperationTool,
13
13
  listOperationsTool
@@ -30,7 +30,7 @@ import {
30
30
  parseExtractorOutput,
31
31
  registerLayaCompletionTaskHook,
32
32
  renderCompletionState
33
- } from "../../../shared/@ai-setting/roy-agent-core-ra66sf50.js";
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-shb1qsyg.js";
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-6k8mb7zx.js";
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-shb1qsyg.js";
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-6k8mb7zx.js";
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-7kvpc0w5.js";
10
- import"../../../shared/@ai-setting/roy-agent-core-6k8mb7zx.js";
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-vpcxv1ty.js";
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-6k8mb7zx.js";
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
- SQLiteTaskStore
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
  };